У меня есть такая программа:
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;
}
Как объяснил автор приведенного выше кода: Программа не будет работать должным образом, потому что в строке 1, когда пользователь нажимает Enter, во входном буфере остается 2 символа: Enter key (ASCII code 13)
и \n (ASCII code 10)
. Следовательно, в строке 2 он будет читать \n
и не будет ждать, пока пользователь введет символ.
Хорошо, я понял. Но мой первый вопрос: почему второй getchar()
( ch2 = getchar();
) не читает Enter key (13)
, а не \n
символ?
Далее автор предложил 2 способа решения таких проблем:
использовать
fflush()
напишите такую функцию:
void clear (void) { while ( getchar() != '\n' ); }
Этот код действительно работал. Но я не могу себе объяснить, как это работает? Поскольку в операторе while, который мы используем getchar() != '\n'
, это означает чтение любого отдельного символа, кроме '\n'
? если да, то во входном буфере все равно остается '\n'
символ?