Stream-Problem
-
Hallo!
In meinem Programm wird eine Datei geöffnet und ausgegeben.
Nun meine Problem: Der letzte Buchstabe wird doppelt ausgegeben!Sowas in der Art:
... ifstream file_in; string filename = "datei.txt"; file_in.open(filename.c_str, ios_base::in); if(!file_in) { cout << "Fehler: Die Datei konnte nicht geöffnet werden!" << endl; return -1; } while(!file_in.eof()) { char zeichen; file_in.get(zeichen); cout << zeichen; } ...
Inhalt von "datei.txt" = Ich bin ein String
Aber ausgegeben wird folgender Text: Ich bin ein StringgWas mache ich falsch?
MfG CSS
-
Standard Fehler
std::basic_istream::eof liefert erst EOF, wenn man eof gelesen hat! Deswegen wird deine Schleife einmal zu oft ausgeführt.
Lösungen
a)int n; while( (n=in.get()) != in::traits_type::eof()) { std::cout << static_cast<char>(n); }
b)
for(;;) { char c; in.get(c); if(in.eof()) break; std::cout << c; }
oä
-
ach btw.
ifstream file_in; string filename = "datei.txt"; file_in.open(filename.c_str, ios_base::in);
mach daraus lieber
string filename="datei.txt"; ifstream file_in(filename.c_str());
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ
-
dank!
Deine 2 Lösung gefällt mir besser, da ich die 1 nicht verstehe!
MfG CSS
-
wie ich gerade bemerkte (danke an MrN :)), hab ich die eifnachste Lösung übersehen
char c; while(in.get(c)) std::cout << c;