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; } }
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!