在下面的代码中,如果用户输入的内容不是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;
}
答案 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