cin.clear()可将cin的iostate重置为goodbit,然后可再接受输入正常工作,然而下面这个demo是行不通的
#include <iostream>
using namespace std;
int main()
{
int a;
while(1)
{
cin>>a;
if(!cin) //条件可改写为cin.fail()
{
cout<<"输入有错!请重新输入"<<endl;
cin.clear();
cin.sync(); //清空流
}
else
{
cout<<a;
break;
}
}
system("pause");
}
这个代码跑起来是个死循环。为什么呢,因为cin没有清空那个错误的输入缓存。比如我给a输入字符类型'a',触发failbit,此时cin的buff里存的是'a',没有赋值给int a,没有flush。所以后面的cin都不会要求输入(缓存里有东西),直接把'a'给int a,当然也一直failbit。这个死循环就是这么来的。
解决办法就是把这个'a'拿走,cin.clear()后加cin.get()即可。