我抽象了一个小模型,代码如下
#include"iostream"
using namespace std;
int main()
{
int n;
cout<<"input:";
cin>>n;
while (n<=0)
{
cout<<"error,input agian!"<<endl;
cin>>n;
}
return 0;
}
看似毫无问题
调试时也往往被忽略
如输入一个正整数没问题
若输入非正整数也没问题
可当输入一个字母或其它时,将出现死循环
解决方法如下
#include"iostream"
using namespace std;
int main()
{
int n;
cout<<"input:";
cin>>n;
while (n<=0)
{
cin.clear(); ///
cin.ignore(); ///
cout<<"error,input agian!"<<endl;
cin>>n;
}
return 0;
}
cin.clear();前面状态为假了,再输入就不被执行了,清空缓冲区,并将错误的cin流标识,通过这个可以把假状态清除掉,加上cin.ignore()就可解决编译器编译while循环时因在缓冲区找不到合乎条件的数据而出现死循环的情况了。