Heim > Backend-Entwicklung > C++ > Warum druckt mein C-Code beim Lesen bis zum EOF die letzte Zeile einer Textdatei zweimal aus?

Warum druckt mein C-Code beim Lesen bis zum EOF die letzte Zeile einer Textdatei zweimal aus?

Barbara Streisand
Freigeben: 2024-12-30 04:16:09
Original
985 Leute haben es durchsucht

Why Does My C   Code Print the Last Line of a Text File Twice When Reading Until EOF?

Lesen aus einer Textdatei bis zum EOF: Lösung der Duplizierung der letzten Zeile

Der bereitgestellte C-Code liest Ganzzahlen aus einer Textdatei, bis er auf die trifft End-of-File-Anzeige (EOF). Allerdings wird die letzte Ganzzahl in der Datei fälschlicherweise zweimal gedruckt. Dies liegt daran, wie der EOF-Indikator innerhalb der Schleifenstruktur des Programms behandelt wird.

Während der Ausführung tritt das Programm in eine Schleife ein, die so lange fortgesetzt wird, bis der EOF-Indikator erkannt wird. Während die Schleife die Datei durchläuft, ruft sie eine Ganzzahl „x“ aus der Datei ab und gibt sie auf der Konsole aus. Nachdem jedoch die letzte Ganzzahl in der Datei gelesen wurde, wird der EOF-Indikator angetroffen.

Das Problem entsteht, weil die Schleifenbedingung EOF auswertet, nachdem die letzte Ganzzahl „x“ abgerufen wurde. Dies bedeutet, dass die Schleife mit demselben Wert von „x“ fortgesetzt wird, der in der vorherigen Iteration geladen wurde, und ihn effektiv zweimal ausgibt.

Um dieses Problem zu beheben, sollte die Schleifenbedingung geändert werden, um nach dem EOF-Indikator zu suchen bevor versucht wird, eine Ganzzahl abzurufen. Dies kann durch die Verwendung einer etwas anderen Schleifenstruktur erreicht werden:

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

In dieser modifizierten Schleife wird das „iFile“-Objekt als Schleifenbedingung verwendet, die implizit nach dem EOF-Indikator sucht. Wenn „iFile“ wahr ist (was anzeigt, dass sich die Datei nicht im EOF-Bereich befindet), ruft das Programm eine Ganzzahl ab und gibt sie aus. Wenn „iFile“ falsch ist (was EOF anzeigt), wird die Schleife beendet.

Durch die Implementierung dieser Anpassung liest das Programm Ganzzahlen aus der Textdatei, bis es EOF erreicht, und gibt jede Ganzzahl einmal aus, wodurch das Problem gelöst wird letzte Zeile wird zweimal gedruckt.

Das obige ist der detaillierte Inhalt vonWarum druckt mein C-Code beim Lesen bis zum EOF die letzte Zeile einer Textdatei zweimal aus?. 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