Wieso wird die Schleife 2x aufgerufen?
-
kernel64 schrieb:
Ist das besser?
jepp es war absolut lebensnotwendig das i in n umzubenennen.
-
while((ifs >> str) && !ifs.eof()) { ++n; cout << ....; }Edit->Tags vergessen

-
Mit diesem Code wird die letzte zeile nicht ausgegeben.
int n = 0; while((ifs >> str) && !ifs.eof()) { ++n; cout << str << " " << n << endl; }In meiner Datei steht folgendes:
info help lock lockIn der Konsole werden nur alle drei zeilen ausgegeben.
-
EInfach das '&& !ifs.eof()' weglassen, dann sollte es funktionieren:
while (ifs >> str) cout << str << " " << ++n << endl;
-
Anscheinend steht das EOF direkt an deinem letzten Wort.
Ein einfacheswhile(ifs >> str) { ... }Sollte alle Probleme lösen ...
Edit->ToSlow()
-
Hallo das mit dem weglassen von '&& !ifs.eof()' klappt prima.
Noch eine Frage, wie kann ich eine ganze zeile auslesen und nicht einzelne stringsBeispiel:
hallo auto test blabla help meAlso wie bekomme ich in der ersten und letzten Zeile alles aufeinmal in str gespeichert. Denn mit dem obigen Code wird jedes Word einzelnd behandelt.
-
getline in Verbindung mit std::string ist dein Freund.
-
getline ist für eine Benutzereingabe und nicht zum auslesen von Dateien.
Also ich hoffe ihr könnt mir helfen folgendes:
hallo auto test blabla help meso auszulesen:
erste zeile:
hallo auto test ...
-
Ups mit getline gehts doch

Wenn ich folgenden Code benutze wird das erste wort nicht angezeigt;
while(ifs >> str) { getline(ifs,str); cout << str << endl; }
-
while(ifs >> str)Damit wird das erste Wort schon eingelesen.
-
string line; while( getline( ifs, line ) ) { cout << line << "\n"; }
-
Das geht mit 'stream.getline'.
Edit: upps da war ja noch eine seite ^^