Heim > Backend-Entwicklung > C++ > Wie teste ich das Dateiende beim Lesen aus einem Dateistream in C korrekt?

Wie teste ich das Dateiende beim Lesen aus einem Dateistream in C korrekt?

Linda Hamilton
Freigeben: 2024-12-21 15:33:10
Original
695 Leute haben es durchsucht

How to Correctly Test for End-of-File When Reading from a File Stream in C  ?

Testen des Stream-Eingabestatus im Vergleich zum zukünftigen Erfolg

Beim Lesen von Eingaben mithilfe von Streams ist es wichtig, den Unterschied zwischen dem Testen des Stream-Status und dem Vorhersagen zu verstehen der Erfolg zukünftiger Operationen.

Problem: Letzte Zeile lesen Zweimal

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
Nach dem Login kopieren

In diesem Code wird die letzte Zeile zweimal gelesen, da f.good() den aktuellen Stream-Status testet und nicht, ob getline() erfolgreich sein wird. Sobald getline() den EOF erreicht, bleibt f in einem „guten“ Zustand, sodass die Schleife auch nach dem Lesen der letzten Zeile fortgesetzt wird.

Lösung: Stream nach dem Vorgang testen

Überprüfen Sie stattdessen den Stream-Status, nachdem Sie den Eingabevorgang ausgeführt haben:

ifstream f("x.txt");
string line;
while (getline(f, line)) {
  // Use line here.
}
Nach dem Login kopieren

Alternative Verwendung eof()

Während die Verwendung von eof() in Schleifenbedingungen nicht empfohlen wird, finden Sie hier eine äquivalente Lösung mit !f.eof():

ifstream f("x.txt");
string line;
while (!f.eof()) {
  if (getline(f, line)) {
    // Use line here.
  } else {
    break;
  }
}
Nach dem Login kopieren

Range -basierte Schleife für alle Zeilen

Um alle Zeilen zu lesen und zu verarbeiten, verwenden Sie eine bereichsbasierte Schleife Schleife:

ifstream f("x.txt");
for (std::string line; getline(f, line);) {
  process(line);
}
Nach dem Login kopieren

Good vs. Stream State

Beachten Sie, dass f.good() falsch benannt ist. Es zeigt nicht wirklich an, ob der Stream „gut“ ist, sondern gibt eher „true“ zurück, wenn sich der Stream nicht in einem „fehlgeschlagenen“ oder „schlechten“ Zustand befindet. Testen Sie immer den Stream selbst (d. h. überprüfen Sie seinen invertierten Fehlerstatus), nachdem Sie Eingabevorgänge ausgeführt haben, um den Erfolg sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie teste ich das Dateiende beim Lesen aus einem Dateistream in C korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage