У мене є така програма:
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'
символ?