Probleme mit Auslesen einer Datei bis zum ende.
-
Hallo,
ich wollte gerne eine datei öfnnen und den inhalt in einem vector speichern(sind nur int werte) jedoch habe ich das problem das ich bei meinem code immer von jedere zahl die ausgelesen wird die 3fache ausfürhung bekommen... warum weiß ich nicht
hier ein codesnippet wo ausgelesen wird, vieleicht ist ja da was falsch.
... while(aus_datei.eof()==false) { aus_datei>>zahl; datei.push_back(zahl); for(int i=0;i<datei.size();++i) { cout<<datei[i]<<endl; } }kann mir einer sagen wie es richtig zu machen geht
-
eof() schlägt erst zu, wenn die letzte Leseoperation am Dateiende hängengeblieben ist - darum läuft deine Schleife einmal zu oft durch. (außerdem landest du in einer Endlosschleife, wenn sich ein Buchstabe in deine Eingabedatei eingeschmuggelt hat).
Bessere Lösung:
while(aus_datei>>zahl) { datei.push_back(zahl); ... }(zur Erklärung: op>> liefert den verarbeiteten Stream zurück - und der kann für die while()-Abfrage in einen bool* umgewandelt werden (wenn ein Fehlerflag gesetzt wird, ergibt diese Umwandlung false))
PS: Ist es Absicht, daß du in jedem Schleifendurchlauf alle bisher eingelesenen Zahlen ausgibst?
* eigentlich ein void*, aber den wandelt C++ gleich weiter um in einen bool-Wert.
-
so ok ich habs ma umgeschrieben aber ein fehler sit noch, er gibt die aller erste zahl nicht mit aus
while(aus_datei>>zahl) { aus_datei>>zahl; cout<<zahl; },danke für die hilfe bis jetzt!
-
Du brauchst ja auch nur einen Aufruf von op>> pro Schleifendurchlauf - in dem Fall den innerhalb des while(...). So liest du bei jedem Durchlauf zwei Werte ein (und entsorgst den jeweils ersten, bevor du irgendetwas damit machen kannst).