C++:cin.clear() 不会重置流

c++: cin.clear() doesnt reset the stream

本文关键字:cin clear C++      更新时间:2023-10-16

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

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

使用类似以下内容:

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

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