Tenho o seguinte programa:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
Como li no livro C, o autor diz que scanf()
deixou um caractere de nova linha no buffer, portanto, o programa não para na linha 4 para o usuário inserir os dados, em vez disso, armazena o caractere de nova linha em c2 e vai para linha 5.
Isso está certo?
No entanto, isso só acontece com char
tipos de dados? Porque eu não vi esse problema com int
os tipos de dados nas linhas 1, 2, 3. Está certo?
fflush(stdin)
pode ser usado antes da chamada parascanf()
para um único caractere. Leia Usandofflush(stdin)
para uma discussão sobre os prós, contras e alternativas a esse método (que funciona, mais ou menos, no Windows, e não funciona na maioria dos outros lugares).