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 的故障位。我也试过只是使用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 回答