C++でeof状態をリセットする方法があるかどうか疑問に思っていましたか?
ファイルの場合は、任意の位置を探すことができます。たとえば、最初に巻き戻すには:
_std::ifstream infile("hello.txt");
while (infile.read(...)) { /*...*/ } // etc etc
infile.clear(); // clear fail and eof bits
infile.seekg(0, std::ios::beg); // back to the start!
_
すでに終わりを過ぎて読んだ場合は、@ Jerry Coffinが示唆するように、clear()
でエラーフラグをリセットする必要があります。
おそらくあなたはiostreamを意味します。この場合、ストリームのclear()
がその役割を果たします。
私は上記の答えに同意しますが、今夜この同じ問題に遭遇しました。そこで、もう少しチュートリアルで、プロセスの各ステップでのストリームの位置を示すコードを投稿すると思いました。私はおそらくここをチェックするべきでした...前に...私は自分でこれを理解するのに1時間を費やしました。
ifstream ifs("alpha.dat"); //open a file
if(!ifs) throw runtime_error("unable to open table file");
while(getline(ifs, line)){
//......///
}
//reset the stream for another pass
int pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: -1 tellg() failed because the stream failed
ifs.clear();
pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: 7742'ish (aka the end of the file)
ifs.seekg(0);
pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: 0 and ready for action
//stream is ready for another pass
while(getline(ifs, line) { //...// }