Ich habe folgendes Programm:
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;
}
Wie der Autor des obigen Codes erklärt hat: Das Programm funktioniert nicht richtig, da es in Zeile 1, wenn der Benutzer die Eingabetaste drückt, im Eingabepuffer 2 Zeichen belässt: Enter key (ASCII code 13)
und \n (ASCII code 10)
. Daher liest es in Zeile 2 das \n
und wartet nicht darauf, dass der Benutzer ein Zeichen eingibt.
OK, ich habe das verstanden. Aber meine erste Frage ist: Warum liest die zweite getchar()
( ch2 = getchar();
) nicht das Zeichen Enter key (13)
, sondern \n
das?
Als nächstes schlug der Autor zwei Möglichkeiten vor, um solche Probleme zu lösen:
verwenden
fflush()
schreibe eine Funktion wie diese:
void clear (void) { while ( getchar() != '\n' ); }
Dieser Code hat tatsächlich funktioniert. Aber ich kann mir nicht erklären, wie es funktioniert? Weil in der while-Anweisung, die wir verwenden getchar() != '\n'
, bedeutet dies, dass Sie ein einzelnes Zeichen außer '\n'
? wenn ja, bleibt im eingabepuffer noch das '\n'
zeichen?