Die eof()-Funktion von ifstream verstehen
Die eof()-Funktion der ifstream-Klasse spielt eine entscheidende Rolle bei Dateieingabevorgängen in C. Sein Verhalten kann jedoch manchmal rätselhaft sein, insbesondere in Bezug auf die Funktion get().
Betrachten Sie das bereitgestellte Beispiel:
#include <iostream> #include <fstream> int main() { std::fstream inf( "ex.txt", std::ios::in ); while( !inf.eof() ) { std::cout << inf.get() << "\n"; } inf.close(); inf.clear(); inf.open( "ex.txt", std::ios::in ); char c; while( inf >> c ) { std::cout << c << "\n"; } return 0; }
Wenn die Eingabedatei „ex.txt“ enthält „abc“, die erste while-Schleife liest vier Zeichen, bevor sie beendet wird. Dies liegt daran, dass eof() das EOF-Flag erst nach einem Leseversuch über das Ende der Datei hinaus setzt. Die erste Schleife liest Zeichen für Zeichen, bis sie einen fehlgeschlagenen Lesevorgang erreicht und das EOF-Flag setzt. Allerdings gibt get() -1 zurück, um das Ende der Datei anzuzeigen, ohne Berücksichtigung des EOF-Flags.
Die zweite Schleife unter Verwendung des >> Bediener zeigt korrektes Verhalten. Das >> Der Operator versucht, ein Zeichen (in diesem Fall eine Zeichenfolge) zu lesen und setzt bei einem fehlgeschlagenen Lesevorgang das EOF-Flag. Somit endet die Schleife nach dem Lesen von „abc“.
Verwirrung auflösen
Um Verwirrung zu vermeiden, ist es wichtig, Folgendes zu beachten:
Führt sowohl eine Lese- als auch eine EOF-Flag-Aktualisierung durch.
Daher wird mit >> wird gegenüber eof() mit get() empfohlen, um das Ende einer Datei genau zu erkennen.
Das obige ist der detaillierte Inhalt vonWie funktioniert die Funktion „ifstream::eof()' von C wirklich mit „get()' und dem Extraktionsoperator?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!