getchar()和scanf的奇怪行为发生在下面的代码中:如果我在/*K1*/ ch = getchar();
行插入,代码在/*k*/
行可以正常工作。
我的意思是,没有调用/*k1*/
行中的getchar
,编译器不会从键盘中请求字符。另一方面,如果包含额外的getchar
,则程序可以完美运行。谁能给我打个铃吗?
int INcoord(int n, int **Coo){/*retorna quantidade de dados lida em coordPontos.dat*/
FILE *fp; /*Arquivos de leitura e gravacao. */
char dummy[MAXSTR]; /*informacoes para o usuario nos arquivos de leitura.*/
int i, j;
int m;
char ch;
printf("Entrada por coordenadas de pontos.n");
printf("Leitura das coordenadas com numeros inteiros.n");
printf("Arquivo de leitura: coordPontos.datn");
if((fp=fopen("coordPontos.dat","r"))==NULL){
printf("Arquivo não pode ser aberto.n"); exit(1); }
fgets(dummy,MAXSTR,fp); /*Apresentacao do arquivo*/
fgets(dummy,MAXSTR,fp); /*texto 1*/
fscanf(fp,"%i ",&m);
/*K1*/ ch= getchar();
if(m<n){
printf("Quantidade de dados menor que o previsto para cadeia do frio.nVerificar entradasn");
printf("Deseja prosseguir programa com a quantidade prevista em coordPontos.dat?n");
printf("S - simn"); printf("Outra letra - aborta programan");
/*k*/ ch= getchar();
if (ch=='S' || ch =='s')n=m; /*funçao retorna quantidade de dados usada. */
else {
printf("programa abortado.n");
exit(1); /*aborta programa */
}
}
fgets(dummy,MAXSTR,fp); /*Texto 2*/
fscanf(fp,"%i ",&j);
fclose(fp);
printf("Teste i = %i, j = %in", m, j);
return n;
}
对getchar()
的第二次调用从流缓冲区返回'n'字符。而不是使用
#include <conio.h>
char input = getche();
,以便只获得一个字符。当然,您需要包括错误检查,因为getche()
也返回特殊键,如F1-F12。