>`)? " />
Eintauchen in die Funktion eof() von ifstream
Das Verhalten der Funktion eof() von ifstream zu verstehen, kann rätselhaft sein, wie im bereitgestellten Codeausschnitt dargestellt:
</p> <h1>einschließen <iostream></h1> <h1>include <fstream></h1> <p>int main() {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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;
}
Schauen wir uns die Erklärung genauer an:
Wenn EOF wirklich Setzt ein
Die Funktion eof() erkennt, wenn ein Lesevorgang versucht, auf Daten über das Ende der Datei hinaus zuzugreifen. Das bedeutet:
Der Grund für dieses Verhalten besteht darin, die Kompatibilität mit verschiedenen Geräten wie Rohren und Steckdosen sicherzustellen, bei denen das Konzept der Dateigröße möglicherweise nicht zutrifft so einfach wie mit einer Textdatei.
Enthüllung der Magie von get() und >>
Die beiden Schleifen Verwenden Sie im Code-Snippet verschiedene Ansätze, um den Inhalt der Datei zu lesen:
Dies erklärt, warum Die erste Schleife liest ein zusätzliches Zeichen und zeigt -1 an, während die zweite Schleife die korrekte Ausgabe liefert – sie beendet die Schleife, bevor versucht wird, über das Ende hinaus zu lesen Datei.
Die Gefahren von -1 vermeiden
Um sich nicht auf die magische Zahl -1 zu verlassen, um das Ende der Datei zu identifizieren, wird empfohlen, std zu verwenden: :char_traits
Das obige ist der detaillierte Inhalt vonWarum verhält sich „ifstream::eof()' bei „get()' und dem Extraktionsoperator („>>') unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!