0

cin我的问题是,如果发生错误,我无法重置's 流。例如,如果我在需要 int 时输入了一个字符串,然后如果我清除流,那么当循环到下一次时,我仍然会到达一个cin.fail()-if.

有什么帮助吗?

我的代码如下:

int main()
{
    int i;
    while(cin>>i,!cin.eof())
    {
        if(cin.fail())
        {
            cin.clear();
            continue;
        }
        cout<<i<<endl;
    }
    system("pause");
}

顺便说一句:有关信息,我使用 Visual Studio 作为 IDE。

4

2 回答 2

5

好吧,字符串仍然存在,因为您还没有提取它。所以下一次读取也会失败。您需要使用cin.ignore来跳过非法字符。

于 2012-10-02T14:31:41.517 回答
1

使用类似的东西:

int i;
while(cin>>i,!cin.eof())
{
    if(cin.fail())
    {
        cin.clear();
        string dummy;
        cin >> dummy;
        continue;
    }
    cout<<i<<endl;
}

这将跳过下一个单词。如果你输入类似的东西,derp10 20你会得到 20。

于 2012-10-02T14:34:43.847 回答