Hallo
Bitte schaut euch doch mal folgenden C-Code an und sagt mit ob meine Überlegungen dazu richtig sind.
#include
int main (void) {
int i;
do {
scanf("%d", &i);
printf("i: %d\n", i);
getchar();
} while (i != 0);
return 0;
}
Angenommen die Zeile: getchar(); ist auskommentiert.
scanf("%d", &i ) „beobachtet“ die stdin. Nach dem Betätigen der Eingabetaste(’\n’) wird die Eingabe auf das Formatierungszeichen hin geprüft. Wird also ein Integer gelesen (Bsp.:„1\n“), so wird der Puffer der stdin geleert und die Eingabe in i geschrieben.
Wird aber nun ein Character gelesen (Bsp:„c\n“), so wird die Eingabe zwar in i geschrieben, der Puffer aber nicht geleert.
Die Folge ist also eine Endlosschleife.
Das Programm mit der Zeile: getchar();
Wenn ein Integer eingegeben wird, wird der Puffer der stdin geleert und die Eingabe in i geschrieben. Die Funktion getchar() tut dabei nix, weil der Puffer ja leer ist. Wird jetzt ein Chracter ‚a‘ eingegeben, sieht der Puffer so aus: „a\n“. getchar() nimmt jetzt das ‚a‘ aus dem Puffer und nur der Zeilenumbruch
bleibt übrig und scanf() kann wieder arbeiten.
Ich hoffe meine Überlegungen sind richtig und der stdin Stream und getchar() arbeiten nach dem FIFO Prinzip.
gruß
matthias