c ++:cin.clear()不重置流

时间:2012-10-02 14:29:19

标签: c++

我的问题是,如果发生错误,我无法重置cin的流。例如,如果我在需要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。

2 个答案:

答案 0 :(得分:5)

嗯,字符串仍在那里,因为你还没有提取它。所以 下次阅读也会失败。您需要使用cin.ignore跳过 非法人物。

答案 1 :(得分:1)

使用类似:

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

这将跳过下一个单词。如果您输入derp10 20之类的内容,则会获得20。