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