1

getchar() 和 scanf 的奇怪行为出现在下面的代码中:如果我插入,/*K1*/ ch = getchar();则代码在行中正常工作/*k*/

getchar我的意思是,如果没有在行中调用 to ,/*k1*/编译器就不会从键盘询问字符。另一方面,如果包含额外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;
}
4

1 回答 1

0

The second call to getchar() returns the '\n' character from the stream buffer. Instead use

#include <conio.h>

char input = getche();

in order to get only one character. Of course you need to include error checking since getche() also returns on special keys like F1-F12.

于 2013-05-02T14:32:00.590 回答