在下面的代碼中出現了一個奇怪的行爲getchar()和scanf: 如果我插入行/*K1*/ ch = getchar();
代碼在行/*k*/
正常工作。getchar()的一個奇怪的行爲
我的意思是,在/*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.dat\n");
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 entradas\n");
printf("Deseja prosseguir programa com a quantidade prevista em coordPontos.dat?\n");
printf("S - sim\n"); printf("Outra letra - aborta programa\n");
/*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 = %i\n", m, j);
return n;
}
請修復代碼標籤?閱讀「如何提出一個好問題」來學習如何去做。 – Meoiswa 2013-05-02 14:30:54
你應該檢查'fgets'和'fscanf'的返回值!...和'getchar'返回一個'int',而不是'char'。雖然返回值的形式爲int,但您需要確保它不是負數。否定意味着錯誤。在將其轉換爲char字符後,您無法執行此操作。 – Sebivor 2013-05-08 19:36:13