Für was brauche ich ".eof()"
-
Wenn ich doch z.B.:
ifstream file("H:/text.txt");habe, dann kann ich doch einfach
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("H:/text.txt"); while(file) { string buffer; getline(file,buffer); cout << buffer << "\n"; } return 0; }machen, und benötige das ".eof()" gar nicht? Für was brauch ich des den dann eigentlich?
MfG
Stromberg
-
damit du das dateiende von fehlern, die beim lesen aufgetreten sind, unterscheiden kannst.
-
ifstream ist eine Klasse und keine Funktion mit einem Rückgabewert.
-
-
Ich check aber jetzt net so ganz, was der große Unterschied zwischen:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("H:/text.txt"); while(!file.eof()) { string buffer; getline(file,buffer); cout << buffer << "\n"; } return 0; }und
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("H:/text.txt"); while(file) { string buffer; getline(file,buffer); cout << buffer << "\n"; } return 0; }ist? Bei der Klasse "ifstream" sind halt die "boolschen Operatoren" überladen oder, vll. wird ja dann auch ".eof()" genutzt?
MfG
Stromberg
-
Hi Stromberg,
ja, das ist ein Unterschied:
Im ersten Fall überprüfst du, ob das eof-bit gesetzt ist:
http://www.cplusplus.com/reference/iostream/ios/eof.htmlIm zweiten Fall, ob das fail- oder bad-bit gesetzt ist:
http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.htmlhttp://www.cplusplus.com/reference/iostream/istream/getline.html
Notice that some eofbit cases will also set failbit.
Deswegen wird das in deinem Fall evtl. keinen Unterschied machen.
Wann beide bits gleichzeitig gesetzt werden, kann ich dir allerdings auch nicht
sagen.Gruß,
CSpille
-
schreib am besten while(getline(file,buffer)) ist viel schönerer
-
okay
