在下面的代码中,如果用户输入的不是一个 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;
}
清除错误状态。
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;
}
我想你应该用if语句代替while循环 有了这个循环,你就可以在错误发生时不断地从cin中读取数据了 然而,cin的结构是这样的,在错误发生后,你必须手动清除错误状态,由于你在这里没有这样做,这将进入一个无限循环。 使用if语句尝试读取一个值,然后让你知道是否成功。
此外,这真的不是一个从cin读取的好方法。 它很脆弱,任何无效的输入都会使你的程序完全崩溃,因为get本身就不安全。 关于在C++中获取输入的更安全、更稳健的方法的讨论,请看以下内容 http:/www.stanford.educlasscs106lcourse-readerCh3_Streams.pdf