feof()
-
Hallo!
Ich lese eine Datei aus komplett aus, um die Daten darin zu verarbeiten. Leider stürzt er nach dem Auslesen der Datei ab, obwohl ich mit feof versuche, dies zu verhindern:
double Auswertung::maxDauer(FILE* senden, FILE* empfangen) { char buffer[16], buffer2[16]; char *wert_1 = fgets(buffer, 16, senden); if(strcmp(wert_1, "Fehler") != 0) { char *wert_2 = fgets(buffer2, 16, empfangen); double wert1 = atof(wert_1); double wert2 = atof(wert_2); double dauer = wert2-wert1; if(dauer > max_dauer) { max_dauer = dauer; } } if(feof(senden)) { AfxMessageBox("Fertig!"); return max_dauer; } maxDauer(senden, empfangen); return 0; }HOffentlich hat jemand von Euch den Adlerblick und kann mir helfen...
Gruß Jörg
-
EDIT: War quatsch, sorry...
-
Erstens solltest du vielleicht die richtige Datei auf EOF überprüfen (Lesefehler in 'empfangen' können schnell zu Problemen führen).
Zweitens schlägt feof() erst zu, wenn bereits der letzt Lesevorgang bereits gescheitert ist - da arbeitest du auf ungültigen Daten (*nachsieht* fgets() liefert NULL beim EOF).
Drittens kannst du die Rekursion komplett weglassen und stattdessen eine Schleife verwenden.
PS: Und viertens empfehle ich einen Umstieg auf fstream;
-
Oder das Verschieben ins C-Forum

-
(D)Evil schrieb:
Oder das Verschieben ins C-Forum

Hm, ich sehe hier:
double Auswertung::maxDauer(FILE* senden, FILE* empfangen)und das sieht mir nicht nach C aus. Mal ehrlich, die Verwendung von Funktionen aus der C Standardbibliothek macht noch kein C-Programm und ist in manchen Fällen durchaus berechtigt. Kein Grund immer gleich so zu tun, als ob sich C Funktionen und C++ ausschließen würden.
-
Hmm stimmt schon aber es spricht in diesem Fall nichts dagegen die C++ Funktionenn zu nutzen und bsw. den Vergleichsoperator von std::string zu nutzen.
Den Funktionskopf hatte ich allerdings übersehen ... sorry.