basic_ios::failは、エラー(failまたはbad)かどうかを判定する。
basic_ios::fail - cpprefjp C++日本語リファレンス
EOFとエラーは独立してるので、EOFであっても、エラーでないということはある。
eof()とは別にfail()でも調べる。
$ vi basic_ios.cpp $ g++ basic_ios.cpp -o basic_ios $ ./basic_ios s: abcde s = abcdeFGHIJ good $ ./basic_ios s: xyzs = xyzDEFGHIJ ! EOF fail $
ただ、この3文字の場合、EOFかつfailとなる。
これは、basic_istream::readの特徴で、文字数に達せずにEOFだとfailがtrueになるという仕様。
Sample/cpp/basic_ios/fail/src/basic_ios at master · bg1bgst333/Sample · GitHub