Es gibt einen zugrunde liegenden Puffer/Stream, aus dem getchar() und Freunde gelesen werden. Wenn Sie Text eingeben, wird der Text irgendwo in einem Puffer gespeichert. getchar() kann ein Zeichen gleichzeitig durchlaufen. Jeder Lesevorgang gibt das nächste Zeichen zurück, bis das Ende des Puffers erreicht ist. Der Grund, warum Sie nicht nach folgenden Zeichen fragen, ist, dass es den nächsten aus dem Puffer holen kann.
Wenn Sie Ihr Skript ausführen und direkt darin eingeben, werden Sie weiterhin zur Eingabe aufgefordert, bis Sie STRG + D (Ende der Datei) drücken. Wenn Sie es wie ./program < myInput aufrufen, wo MyInput eine Textdatei mit einigen Daten ist, wird es das EOF erhalten, wenn es das Ende der Eingabe erreicht. EOF ist kein Zeichen, das im Stream vorhanden ist, sondern ein Sentinel-Wert, der angibt, wann das Ende der Eingabe erreicht wurde.
Als eine zusätzliche Warnung, ich glaube, getchar() wird auch EOF zurückgeben, wenn es einen Fehler auftritt, so dass Sie ferror() überprüfen möchten. Beispiel unten (nicht getestet, aber Sie bekommen die Idee).
main() {
int c;
do {
c = getchar();
if (c == EOF && ferror()) {
perror("getchar");
}
else {
putchar(c);
}
}
while(c != EOF);
}
Isnt EOF ein Zeichenwert und kein int? –
Ich denke, es ist ein int, dessen Wert -1 ist. – Shubham
Zeichenfolgen werden von \ 0 beendet. Dateien werden durch EOF beendet, das ist -1 –