Heim > Backend-Entwicklung > C++ > Wie verhindert man doppelte Lesevorgänge beim Lesen von Ganzzahlen aus einer Datei in C?

Wie verhindert man doppelte Lesevorgänge beim Lesen von Ganzzahlen aus einer Datei in C?

Mary-Kate Olsen
Freigeben: 2025-01-02 19:11:40
Original
145 Leute haben es durchsucht

How to Prevent Double Reads When Reading Integers from a File in C  ?

Ganzzahlen aus einer Datei bis zum EOF lesen: Doppelte Lesevorgänge vermeiden

Der bereitgestellte C-Code liest Ganzzahlen aus einer Textdatei, bis sie das Ende erreicht der Datei (EOF). Allerdings wird die letzte Zeile zweimal gelesen, was zu einer Wiederholung in der Ausgabe führt. Dies liegt daran, dass:

  • Beim Lesen der letzten Ganzzahl (30 im Beispiel) und der Prüfung auf EOF bleibt die EOF-Markierung ungelesen.
  • In der nächsten Iteration wird dieselbe Ganzzahl ( 30) wird weiterhin im Eingabepuffer gespeichert und EOF wird korrekt erkannt.
  • Die Ganzzahl wird zweimal ausgegeben: einmal aus dem Puffer der vorherigen Iteration und erneut aus dem aktuellen EOF-Prüfung.

Lösung:

Um dieses Problem zu beheben, verwenden Sie eine While-Schleife, die beim Lesen von EOF beendet wird:

while (true) {
    int x;
    iFile >> x;
    if (iFile.eof()) break;
    cerr << x << endl;
}
Nach dem Login kopieren

In dieser Schleife:

  • Die Ganzzahl wird in den Puffer eingelesen.
  • If EOF ist erreicht, die Schleife wird beendet.
  • Andernfalls wird die Ganzzahl im Standardfehler ausgegeben.

Dieser Ansatz stellt sicher, dass die letzte Ganzzahl nur einmal gedruckt wird.

Hinweis:

Der ursprüngliche Code hatte ein weiteres potenzielles Problem: den Versuch, eine leere Datei zu lesen. Dies kann gelöst werden, indem der Lesevorgang in eine if-Anweisung eingebettet wird, die prüft, ob der Stream geöffnet ist und nicht bei EOF.

Das obige ist der detaillierte Inhalt vonWie verhindert man doppelte Lesevorgänge beim Lesen von Ganzzahlen aus einer Datei in C?. 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