Wiederum hat dieser Fehler seine Ursache darin, daß die Datei im Modus Anhängen
geöffnet wurde. Wir lesen bei unserem Programm ja nicht nur die Zeichen ein, sondern
schreiben auch die jeweiligen Anzahlen der pro Zeile aufgetretenen Bytes ans Ende der Datei.
Und hier liegt das Problem: Wenn wir zum ersten Mal den Wert von zaehler
in die
Datei schreiben, wird die Datei wieder ans Ende positioniert. Der folgende Aufruf von
get()
liest dann nur noch das Dateiende ein, so daß die while-Schleife
wieder -- wie bereits bei unserem ersten Problem -- vorzeitig verlassen wird.
Das Problem kann wie folgt behoben werden: bevor man den Wert ans Dateiende schreibt, merkt man sich die aktuelle Leseposition in einer zusätzlichen Variablen. Nach dem Schreiben in die Datei kehrt man dann wieder an die ursprüngliche Position zurück:
streampos gemerkt = datei.tellg(); // aktuelle Position merken
datei << zaehler << ' ';
// Zhlerstand in die Datei schreiben
datei.seekg(gemerkt);
// auf alte Position zurcksetzen
Wird das Programm wie angegeben modifiziert, so ist zumindest die Ausgabe auf dem
Bildschirm (cout
) in Ordnung.