Beim lesen aus datei, ließt er immer zuviel
-
Und noch etwas genauer: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ
Caipi
-
ok, also auf failbit testen, aber wo?
-
Steht ganz genau im Link von Caipi.
-
jo hab ich, versteh das aber mit der for schleife nicht!
-
for (int i; (in >> i).fail() == false; )
Ich denke mal du meinst das hier.
Ist doch ganz einfach. Es wird solange ein Ineteger i eingelesen aus in bis das failbit gesetzt ist. Dann wird die Schleife abgebrochen.
Das schöne ist, dass du die Lese- und Testoperation direkt im Schleifenkopf stehen hast.
-
aber ich will keine zahlen lesen!
wahrscheinlich denk ich grad falsch?!
-
Hallo,
du hast:while(!source.eof()) //lesen solange quelldatei nicht am ende { char ch; ch=source.get(); ... }
Es gibt von eine Variante von get, die das gelesene Zeichen in einem Ausgabeparameter liefert und als Rückgabewert den Stream selbst hat.
Damit kannst du deinen Code ganz einfach korrigieren:for (char ch; source.get(ch); ) { ... }
source.get(ch); ist in diesem Kontext äquivalent zu source.get(ch).fail() == false.
Du testet hier also nach jedem Leseversuch ob das Lesen geklappt hat oder nicht.
-
also komplett die while schleife austauschen??
-
navigon schrieb:
also komplett die while schleife austauschen??
Du kannst natürlich auch die while-Schleife beibehalten:
char ch; while(source.get(ch)) { ... }
Du kannst den Test auch expliziter machen:
while(!source.eof()) { char ch = source.get(); if (source) { // Zeichen nur verarbeiten, wenn Lesevorgang erfolgreich war } }
-
..zunächst darauf achten, dass du dich nur struktur- bzw. typweise in der Datei bewegst (gerade bei char wg. Endekennung wichtig).
Wenn das Ganze verarbeitet wird; ist die Endekennung natürlich auch relevant.Ich würde dann mit cin.getline arbeiten.