为什么我的cin循环永远不会结束?

时间:2011-02-04 19:20:16

标签: c++

在下面的代码中,如果用户输入的内容不是int,程序将进入无限循环。为什么会发生这种情况,我该怎么做才能解决它?

#include <iostream>
#include <string>
using namespace std;


int main()
{
    int i;
    char str[100];
    while (!(cin >> i))
    {
        gets(str);
        cout << "failure read!" << endl;
    }

    cout << "successful read!" << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:4)

清除错误状态:

int main()
{
    int i;
    char str[100];
    while (!(cin >> i))
    {
        cin.clear();
        cin.getline(str,100);
        cout << "failure read!" << endl;
    }

    cout << "successful read!" << endl;
    return 0;
}

答案 1 :(得分:1)

我认为你想用if语句替换while循环,使用这个循环,你会在发生错误时不断读取cin。但是,cin的结构使得在发生错误之后,您必须手动清除错误状态,并且由于您在此处没有这样做,因此将进入无限循环。使用if语句尝试读取一个值,然后让你知道它是否成功。

另外,这真的不是从cin读取的好方法。它很脆弱,任何无效的输入都可以完全取消你的程序,因为获取本质上是不安全的。有关使用C ++获取输入的更安全且更健壮的方法的讨论,请查看http://www.stanford.edu/class/cs106l/course-reader/Ch3_Streams.pdf