c - A strange behaviour of getchar() -
an odd behaviour of getchar() , scanf ocurred in code below: if insert, in line /*k1*/ ch = getchar();
code works in line /*k*/
.
i mean, without calling getchar
in line /*k1*/
compiler doesn't ask character keyboard. on other hand if getchar
included program runs perfectly. ring me bell?
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 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 frio.\nverificar entradas\n"); printf("deseja prosseguir programa com 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, j = %i\n", m, j); return n; }
the second call getchar()
returns '\n' character stream buffer. instead use
#include <conio.h> char input = getche();
in order 1 character. of course need include error checking since getche()
returns on special keys f1-f12.
Comments
Post a Comment