Seltsames Verhalten beim auslesen einer ASCII-Datei
-
Hallo,
entweder hab ich nen totalen Blackout und sehe nen ganz einfachen Fehler nicht, oder das Programm verhält sich wirklich nicht so, wie es sollte
folgendes Programm gibt die letzte der Datei "p01.c" Zeile immer doppelt aus, warum ?
/** * Programm Uebung 2 * * p02.c * * Jan-Paul Nachtwey * 25.04.2005 * * Ausgabe der Datei p01.c auf dem Bildschirm. * */ #include <stdio.h> int main(void) { // Dateivariable deklarieren FILE *datei; // Datei öffnen und der Variablen datei zuordnen (Variable datei initialisieren) datei = fopen("p01.c","r"); int zeilennummer=1; // solange Ende der Datei nicht erreicht wurde while (!feof(datei)) { // Zeile als Array mit maximal 200 Zeichen deklarieren char *zeile[200]; // Zeile aus der Datei auslesen und in die Variable zeile schreiben fgets(zeile,200,datei); // Zeile mit Zeilennummer (3-stellig / rechtsbündig) ausgeben printf("%3d %s",zeilennummer,zeile); //Zähler für Zeilennummern um 1 erhöhen zeilennummer++; } // Datei schließen fclose(datei); }
Vielen Dank für jeden Hinweis.
mit freundlichen Grüßen, Paul
-
feof() liefert erst dann true, wenn EOF bereits gelesen wurde. dh, deine schleife liest die letzte zeile aus und hört vor dem EOF auf zu lesen. dann wird feof aufgerufen, welches false returned, weil EOF ja noch nicht gelesen wurde. danach wird wieder gelesen, diesmal nur EOF und der puffer wird deshalb nicht angefasst. der alte puffer wird ausgegeben und jetzt endlich liefert feof true.
sprich: statt feof zu verwendne, lieber den returnwert von fgets testen
-
Vielen Dank, jetzt klappts !