質問: 正常状態と読み取り失敗の違いと二つの使い分けが知りたいです。 ``` #include #include #include #include #include #include using namespace std; #define BUFFER 2 int main() { string number; char str[32]; while (true) { cout << "文字を入力してください:"; //cin >>setw(3)>> number; cin.getline(str,BUFFER); /*入力エラー処理*/ if (cin.good() != true) {//正常じゃない時 cout << "入力エラー\n"; cin.clear(); cin.ignore(1024,'\n'); continue; } cout << "number:" << str << endl; cin.ignore(1024,'\n'); } //good正常状態エラーなし //fail読み取り失敗 _getch(); return 0; } ```
回答: ストリーム状態は下記(およびそのリンク先)を参照すると良いと思います。 > > > > > 正常以外の状態は、 * `eof` : ファイル終端に達した * `fail` : エラーが発生した * `bad` : 回復不可能なエラーが発生した となっています。`!cin.good()`だと、上記のどれが発生したかわからないので、処理を誤る可能性があると思います。 #少なくとも`eof`は明示的に(`cin.eof()`で)判定した方が良いと思います。