ストリームのseekg(0)
をクリアする必要があるかどうか、またその理由を知りたいです。eofbit
私はすでにすべてのストリームを読み取ったため、EOF
到達しました(ただし、まだ設定されていません) 。有効な位置に戻って、いくつかの文字を再度読み取りfailbit
たいと考えています。seekg()
この場合seekg(0)
、セットで「動作する」ように見えeofbit
ますが、ストリームから読み取ろうとするとすぐに、failbit が設定されます。このロジックは正しいですか、それとも私の実装は悪いですか? このケースを認識して eofbit を手動でクリアする必要がありますか (failbit が設定されていない場合)?
編集:
読者から提供された次のプログラムは、私の実装で異なる結果をもたらします ( mingw32-c++.exe (TDM-2 mingw32) 4.4.1 ):
#include <sstream>
#include <iostream>
#include <string>
int main() {
std::istringstream foo("AAA");
std::string a;
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo.seekg(0);
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 0 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 0
foo >> a;
std::cout << foo.eof() << " " << foo.fail() << std::endl; // 1 1
}
上記のコメントは、実装でそのプログラムを試したユーザーからのものです。次の結果が得られます。
1 0
1 0
1 1
1 1