在编写程序时,遇到了一个致命的问题,原本是想使用cin输入一个int型的数值,但是错误的输入了char或者string型,导致程序进入死循环。
类似程序如下:
#include<iostream>
using namespace std;
int main() {
int i;
do {
cout << "Input ";
cin >> i;
if (cin.fail()){
cout <<"Error" << endl;
}
} while (i < 0);
return 0;
}
定义了一个int型的 i ,但是当 i 输入类型不是int型时就会进入死循环。
按照http://www.cnblogs.com/pianoid/archive/2011/05/03/2035656.html 这里的介绍,应该是错误标志符的原因,当我们输入的类型不匹配时,将会返回一个错误,使用cin.fail()函数可以确定输入是否错误。
怎么解决呢?
我在网上搜了好多,普遍做法都是清楚缓冲区和清楚错误标志。网上大多数的方法大多是使用cin.clear(),或者cin.ignore() 等等,但是我试过了还是不行,按照上面的博客中的做法,好像也不行。
我们现在要做的是:清楚缓冲区和清楚错误标志;
下面是我修改过的做法,实验后可行:
#include<iostream>
using namespace std;
int main() {
int i;
do {
cout << "Input ";
cin >> i;
if (cin.fail()){
cout <<"Error" << endl;
cin.clear();
cin.ignore(1024,'\n');
}
} while (i < 0);
return 0;
}
这是可以防止cin不能输入,进入死循环。