Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:cin.clear()不会重置流_C++ - Fatal编程技术网

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

C++ c++;:cin.clear()不会重置流,c++,C++,我的问题是,如果发生错误,我无法重置cin的流。例如,如果我在需要int时输入一个字符串,然后清除流,当循环到下一次时,我仍然会到达cin.fail()-if 有什么帮助吗 我的代码如下: int main() { int i; while(cin>>i,!cin.eof()) { if(cin.fail()) { cin.clear(); continue; }

我的问题是,如果发生错误,我无法重置
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");
}
intmain()
{
int i;
而(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
继续;
}

cout嗯,字符串仍然在那里,因为您还没有提取它。所以 下次读取也将失败。您需要使用
cin。忽略
跳过

非法字符。

嗯,字符串仍然存在,因为您尚未提取它。因此 下次读取也将失败。您需要使用
cin。忽略
跳过
非法字符。

使用如下内容:

int i;
while(cin>>i,!cin.eof())
{
    if(cin.fail())
    {
        cin.clear();
        string dummy;
        cin >> dummy;
        continue;
    }
    cout<<i<<endl;
}
inti;
而(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
虚拟字符串;
cin>>假人;
继续;
}
不能使用类似以下内容:

int i;
while(cin>>i,!cin.eof())
{
    if(cin.fail())
    {
        cin.clear();
        string dummy;
        cin >> dummy;
        continue;
    }
    cout<<i<<endl;
}
inti;
而(cin>>i,!cin.eof())
{
if(cin.fail())
{
cin.clear();
虚拟字符串;
cin>>假人;
继续;
}

您不需要在循环表达式中使用
!cin.eof()
,因为
>
运算符返回流,并且可以在布尔表达式中使用它。@JoachimPileborg除了这里,他只想在错误不是由于eof引起的情况下循环。您不需要
!cin.eof()
在循环表达式中,因为
运算符返回流,可以在布尔表达式中使用。@JoachimPileborg,除了这里,他只想在错误不是由于EOF引起的情况下循环。嗯,我想我没有正确使用它,因为它不起作用。你能将它添加到我的示例代码中吗?我已经尝试将它添加到上面的if中在cin.clear()下,但没有用。Edit:通过找到另一个线程使其工作。它使用:
cin.clear();cin.ignore(numeric_limits::max(),'\n');
嗯,我想我没有正确使用它,因为它不工作。你能将它添加到我的示例代码中吗?我已经尝试将它添加到if,在cin.clear()的上面和下面,但无效。编辑:通过查找另一个线程使其工作。它使用:
cin.clear();cin.ignore(numeric_limits::max(),'\n');