@MadDevil sagte in Datei ein zweites mal öffnen ohne das alles weg ist.:
@Swordfish Kannst du das nochmal so formulieren das ich das verstehen kann.
Der Arbeitsablauf
Prüfen
Lesen
Verarbeiten
ist immer falsch.
Richtig ist
Lesen
Prüfen
Verarbeiten
siehe auch schon weiter oben:
@wob sagte in Datei ein zweites mal öffnen ohne das alles weg ist.:
Eine while (!file.eof)-Schleife ist praktisch immer verkehrt, da du erst testest, ob du hinter das Dateiende versucht hast zu lesen (genau das sagt dir das EOF, es sagt dir nicht, dass du jetzt am Ende bist), bevor du es dann möglicherweise doch tust. Du musst so einlesen, wie du das innerhalb der Schleife gemacht hast, also while (einlesen_erfolgreich) verarbeite_wert();.
Das gilt nicht nur für das Lesen von Dateien, sondern für alle Aktionen, die irgendwie fehlschlagen können. Denn erstens kann man nicht alles prüfen, und zweitens kann sich zwischen Prüfung und Aktion der Zustand, den man geprüft hat, ändern. Daher immer eine Aktion einfach versuchen, dann prüfen, ob es geklappt hat.
Ausnahmen darf man machen, wenn bei einer unerlaubten Aktion buchstäblich das Flugzeug abstürzen würde oder das Kraftwerk explodiert. Aber nichts was man an einem normalen Heimcomputer macht.
Besonders falsch ist es bei der bemängleten while (!file.eof)-Schleife , denn da ergibt es nicht einmal Sinn, selbst wenn man obige Begründung vernachlässigt. eof prüft, ob die vorherige Leseaktion an das Ende gestoßen ist, nicht ob die nächste Leseaktion an das Ende stoßen würde (Wie sollte eof das auch wissen? Es kann ja gar nicht wissen, was kommen wird). Daher ergibt eof als Vorprüfbedingung überhaupt gar keinen Sinn.