1

以前のバージョンの Primer から C++ を学ぼうとしていて、iostream オブジェクトに関連するコードの一部を実行しようとしましたが、問題が発生しました。

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[])
{
    int ival;

    try
    {
        while (cin >> ival, !cin.eof())
        {
            if (cin.bad())
                throw runtime_error("IO stream corrupted");
            if (cin.fail())
            {
                cerr << "Invalid input - try again";
                cin.clear(iostream::failbit);
                continue;
            }
            else
                cout << ival << endl;
        }

        return EXIT_SUCCESS;
    }

    catch(runtime_error err)
    {
        cout << err.what();
        return EXIT_FAILURE;
    }
}

このプログラムが無効な入力に遭遇すると、停止せずに「無効な入力 - 再試行」を出力し、cin.clear(iostream::failbit)cin の failbit を実際に「クリア」しないことを通知します。cin.clear()私も無駄に使ってみました。私の質問は、cin をエラーのない状態に戻す方法を教えてください。

4

1 に答える 1

0

私が間違っていなければ、cin.clear(iostream::failbit) は新しい状態を失敗に設定します。最初に問題の原因となっている入力の部分を取り除き、次にcin.clear()orを使用する必要がありcin.clear(iostream::goodbit)ます。

詳細については、こちらをご覧ください: http://www.cplusplus.com/reference/ios/ios/clear/

于 2013-06-09T17:50:17.390 に答える