ifstream frage // EOF undefiniert?
-
hallo!
wenn ich einen ifstream mit
while ( !stream.eof() ) { ... bla = stream.get(); }durchlaufen habe, mit welcher funktion setze ich den filepointer wieder auf 0 zurück???
-
Mit seekg() setzt du den Filepointer (auf eine beliebige Position).
PS: Und nicht vergessen, das eofbit mittels clear() wieder zurückzusetzen

-
also sieht das jetz so aus:
clear(eof); stream.seekg(0);oder?
-
Fast - der erste Befehl muß
stream.clear();lauten.PS: Für weitere Fragen zu Stream kannst du gerne meinen Magazin-Artikel "Ein- und Ausgabe in C++" konsultieren

-
alles klah und vielen dank!

-
mh, es tritt ein fehler auf...
85 G:\verschl_quadrat\verschl_qua3_p.cpp `eof' undeclared (first use this function)
wie kann ich eof definieren? welcher header ist das?
-
'ios::' davor. Und 'while(not stream.eof())' ist verbotener Code, weil er nicht prüft, ob ein Fehler aufgetreten ist.
-
und was ist besser?
-
Java schonmal nicht

-
hokage schrieb:
und was ist besser?
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ
-
das funktioniert genausowenig.
87 G:\verschl_quadrat\verschl_qua3_p.cpp invalid use of non-static member function
bool std::basic\_ios<\_CharT, \_Traits>::eof() const [with \_CharT = char, \_Traits = std::char_traits<char>]' 87 G:\\verschl\_quadrat\\verschl\_qua3\_p.cpp no matching function for call tostd::basic_ifstream<char, std::char_traits<char> >::clear(bool (std::basic_ios<char, std::char_traits<char> >::)() const)'
note G:\Dev-Cpp\include\c++\3.4.2\bits\basic_ios.tcc:40 candidates are: void std::basic_ios<_CharT, _Traits>::clear(std::_Ios_Iostate) [with _CharT = char, _Traits = std::char_traits<char>]
-
Zeig doch bitte auch den Code, der zu diesen Meldungen gehört. Wir helfen zwar gerne bei Problemen, aber nicht bei solchen Ratespielchen.
Was die Prüfung auf das eofbit angeht - die führt recht schnell in eine Endlosschleife, wenn ein "normaler" Lesefehler mitten in der Datei aufgetreten ist (der setzt das failbit, wodurch der Stream unlesbar wird - aber deine Schleife läuft munter weiter). Ersetz' die Schleifenbedingung besser durch
while(stream.good())...oderwhile(stream);(damit fragst du alle möglichen Statusbits des Streams ab).PS: und wie man clear() richtig anwendet, habe ich oben bereits geschrieben.
-
Das Problem hat sich schon von selbst erledigt. Ich hatte dann einen Versuch gestartet, aber das mit dem Runden ist doch nicht sehr sinnvoll

genausowenig wir für jedes zeichen einen strich machen zu lassen...
ich werde da wohl doch bald auf die GUI-Programmierung eingehen für sowas.
Vielen dank für die tipps trotzdem an euch alle
