c++,cin.fail()とcin.good()の違いが知りたい


正常状態と読み取り失敗の違いと二つの使い分けが知りたいです。

[code]

            #include <string>
            #include <cctype>
            #include <iostream>
                #include <fstream>
            #include <iomanip>
            #include <vector>
            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;
            }
    
[/code]




ストリーム状態は下記(およびそのリンク先)を参照すると良いと思います。

> <https://ja.cppreference.com/w/cpp/io/basic_ios>

正常以外の状態は、

  * `eof` : ファイル終端に達した
  * `fail` : エラーが発生した
  * `bad` : 回復不可能なエラーが発生した

となっています。`!cin.good()`だと、上記のどれが発生したかわからないので、処理を誤る可能性があると思います。

＃少なくとも`eof`は明示的に(`cin.eof()`で)判定した方が良いと思います。




ストリーム状態は下記(およびそのリンク先)を参照すると良いと思います。

> <https://ja.cppreference.com/w/cpp/io/basic_ios>

正常以外の状態は、

  * `eof` : ファイル終端に達した
  * `fail` : エラーが発生した
  * `bad` : 回復不可能なエラーが発生した

となっています。`!cin.good()`だと、上記のどれが発生したかわからないので、処理を誤る可能性があると思います。

＃少なくとも`eof`は明示的に(`cin.eof()`で)判定した方が良いと思います。

