J'ai le programme suivant :
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
Comme l'a expliqué l'auteur du code ci-dessus : Le programme ne fonctionnera pas correctement parce qu'à la ligne 1, lorsque l'utilisateur appuiera sur Entrée, il laissera dans le tampon d'entrée 2 caractères : Enter key (ASCII code 13)
y \n (ASCII code 10)
. Par conséquent, à la ligne 2, on lira le texte suivant \n
et n'attendra pas que l'utilisateur entre un caractère.
OK, j'ai compris. Mais ma première question est la suivante : pourquoi la deuxième getchar()
( ch2 = getchar();
) ne lit pas le Enter key (13)
plutôt que \n
caractère ?
Ensuite, l'auteur a proposé deux façons de résoudre ces problèmes :
-
utiliser
fflush()
-
écrire une fonction comme celle-ci :
void clear (void) { while ( getchar() != '\n' ); }
Ce code a fonctionné. Mais je n'arrive pas à m'expliquer comment il fonctionne ? Parce que dans l'instruction while, nous utilisons getchar() != '\n'
c'est-à-dire lire n'importe quel caractère à l'exception de '\n'
? si c'est le cas, le tampon d'entrée contient toujours le '\n'
caractère ?