У меня есть следующая программа:
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' );
}
Thisкод работал на самом деле.Но я не могу объяснить себе, как это работает?Поскольку в операторе while мы используем getchar() != '\n'
, это означает чтение любого отдельного символа, кроме '\n'
?если так, во входном буфере все еще остается символ '\n'
?