Mit fgets aus Datei lesen (Rekursiv)
-
Einen schönen guten Abend zusammen,
Habe eigentlich mehr nur eine bestimmte Frage als ein Problem.
Wir gehen mal von einer Datei mit mehreren Zeilen aus.Wenn ich nun z.B. mit fgets() die 2. Zeile auslese und die Funktion rekursiv aufrufe, befindet sich der Cursor von fegts() weiterhin in der 2. Zeile oder wieder am Anfang der Datei?
Danke für die Hilfe
-
Mit fgets() liest du genau garnix ein
Desweiteren hängt es davon ab, wie, oder ob du den FILE Parameter an fgets (rekursiv) weitergibst.
-
Ja eigentlich eher aus.
Vielen Danke für die schnelle Antwort, dann weis ich bescheid.
-
Eher aus?!
FILE* ist ein Zeiger auf eine Struktur, diese speicherte die Dateizeigerposition. Die Rekursion ist der Struktur egal.
void recureader(FILE* fp) // Output Inverter :D { char buf[1024] = {0}; if( feof(fp) ) return; fgets(buf, sizeof(buf), fp); recureader(fp); printf("%s", buf); } int main() { FILE* fp = fopen("test.txt", "r"); if( NULL == fp ) return 0; recureader(fp); fclose(fp); getchar(); return 0; }
-
Das mit dem auslesen sollte am Ende das Programm machen können bei mir.
Danke nochmal für das anschauliche Programm.
-
void recureader(FILE* fp) // Output Inverter :D { char buf[1024] = {0}; if( feof(fp) ) return; fgets(buf, sizeof(buf), fp); recureader(fp); printf("%s", buf); } int main() { FILE* fp = fopen("test.txt", "r"); if( NULL == fp ) return 0; recureader(fp); fclose(fp); getchar(); return 0; }
Undefiniertes Verhalten, da feof nur gültige Werte liefert NACH einer Leseaktion.
-
Wo hast du denn diese Weisheit her, im Standard finde ich sie jedenfalls nicht.
Siehe ruhig auch hier http://www.cplusplus.com/reference/clibrary/cstdio/feof/, wie feof benutzt wird.
-
Edit: verlesen.
-
Wutz schrieb:
Undefiniertes Verhalten, da feof nur gültige Werte liefert NACH einer Leseaktion.
ISO/IEC 9899:1999 7.19.5.3 (7) schrieb:
When opened, a stream is fully buffered if and only if it can be determined not to refer to an interactive device. The error and end-of-file indicators for the stream are cleared.
und
ISO/IEC 9899:1999 7.19.10.2 (2-3) schrieb:
2 The feof function tests the end-of-file indicator for the stream pointed to by stream.
3 The feof function returns nonzero if and only if the end-of-file indicator is set for stream.
-
-
Wutz schrieb:
Da ist von undefiniertem Verhalten nirgendwo die Rede. Aber selbst, wenn deine Quelle deinen Fehler gemacht hätte, wäre der Standard autoritativ.
-
Wutz schrieb:
Undefiniertes Verhalten, da feof nur gültige Werte liefert NACH einer Leseaktion.
du hast keinen überblick über diese konstellation.