Ende der Datei stdin
Eine Frage über diese wurde hier gefragt
Ende der Datei (EOF) in C
aber es immer noch nicht ganz mein problem lösen.
EOF
macht Sinn für mich in jedem Datenstrom, die nicht stdin
zum Beispiel wenn ich einige data.txt
Datei fgetc()
Lesen alle chars und kommen an das Ende der Datei und zurück -1
.
Was ich nicht verstehe, ist das Konzept der EOF
im stdin
. Wenn ich getchar()
, wird es warten, bis mir etwas zu geben, so dass, wenn es NICHTS schriftliches, das Ende der Datei, (EOF
) nicht wieder automatisch?
Ist es So, dass nur der Benutzer aufrufen kann EOF
im stdin
durch drücken von Strg+Z?
Wenn ja, dann, was sind einige der Anwendungen von EOF
im stdin
? Ich denke, es sagt, das Programm weiter zu Lesen, bis der Benutzer ruft das Ende der Datei? ist das alles?
Danke
- Ja nur
ctrl+D
wird Ihnen ein EOF-Zeichen über stdin auf unix.ctrl+Z
auf windows - vielleicht ist es eine Frage des Wartens für die tatsächlichen Eingabe-oder nicht und das hängt von Eingabe-Umleitung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist nicht es sein sollten, die vom Benutzer gesendet.
Ja, Sie können die
EOF
Indikator fürstdin
mit einer speziellen Tastenkombination können Sie die Eingabe in der Konsole für die linux-Konsole, die Strg+D und für windows Strg+Z.Den Einsatz von it hängt davon ab, ob Sie anweisen, den Benutzer zur Eingabe der
EOF
explizit oder nicht, zum Beispiel finde ichpython
Konsole wird Ihnen sagen, so etwas wiePress Ctrl+D or type quit() to exit
.Sowie
EOF
ist nicht unbedingt-1
es ein makro und verwenden Sie es um zu testen, für dieEOF
Indikator. Und noch wichtigerEOF
ist kein Zeichen, es ist ein spezieller Wert, der angibt, dass die End Of File Kennzeichen gesetzt ist.Auch
getchar()
entsprichtfgetc(stdin)
.EOF
ist nicht ein Zeichen.stdin
dass keine Daten mehr angefügt wird. Ich denke, diese Antwort muss größeres Gewicht Ihres Kommentars "EOF
ist nicht ein Zeichen"In linux bash, wenn Sie drücken Sie STRG+D, generiert es
EOF
.In Windows, die äquivalent ist STRG+Z
So, Nein, wenn nichts geschrieben an das terminal, dass nicht generieren
EOF
automatisch. Die Scannen Funktion ist in "wait" - Status dann. Also, ohne jede andere Eingänge, im wait-Zustand, wenn Sie STRG+D gedrückt wird, die Taste drücken, wird übersetzt [durch den terminal-Treiber], umEOF
.AnmerkungIn der Regel, sobald Sie die Eingabe-Wert, und drücken Sie die ENTER - Taste, die scannning Funktion startet den Scanvorgang. Zu feed ein input für die Herstellung von
EOF
müssen Sie drücken Sie STRG+D.Verwandte: Bitte reaed die wiki-Eintrag für
EOF
Anmerkung: Mit Dank an Herrn Zeichnete für die Klarstellung.
CTRL+D
generiert EOF nur, wenn nichts eingegeben wurde. Ansonsten drück alle Daten, die eingegeben wurden, instdin
, als ob Sie gedrückt hatteENTER
(ohne drücken ein Zeilenvorschub-Zeichen).stdin
ist ein stream, werden die Daten nicht verfügbar, bis der Benutzer drückt einige Tasten. Eine Datei auf der Festplatte bereits hat (eine Feste Menge) Inhalte.Beim Lesen von
stdin
, wenngetchar()
nicht warten, bis der Benutzer eine Eingabe tätigen, dann wird das Programm immer bekommenEOF
. Damit wird es unmöglich, zu verwendenstdin
als input-Datei.Weil
getchar()
wartet bis der Benutzer die Eingabe etwas gibt es keine Möglichkeit, signal input abgeschlossen; das ist der Grund, warum die Betriebssysteme bieten eine Kombination von Tasten, die haben diese Besondere Bedeutung, wenn Sie gedrückt werden, auf der Konsole.Windows verwendet StrgZ und Unix-ähnlichen Betriebssysteme (einschließlich OSX) verwenden Sie StrgD für diesen Zweck.
Die Datei
stdin
ist nicht immer der user Tippen auf der Tastatur. Wenn Sie umleiten von Eingabe-zu Ihrem Programm, es ist nur eine normale Datei ist.Was verwirrend sein kann, ist, dass kein geben input in ein Konsole-Fenster markiert nicht das Ende der Eingabe. Aber denke, dass es andersherum: wie kann ein user so schnell reagieren, dass das Programm nicht beenden, bevor es, wenn die Konsole nicht tun würde, einige, die Pufferung für den user? Nach drücken der Taste Enter der user sagt, dies ist eine Zeile von der Eingabe. In anderen Worten: ein Programm läuft in einem Konsolenfenster wartet immer auf den nächsten Eingang zu kommen.
Meisten Programme definieren, einen besonderen Satz zu Ende einer Konsole-Sitzung. Sie wissen wahrscheinlich
exit
.