C语言 getchar()的奇怪行为



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。

最新更新