今天遇到一个题目,要求验证输入的合法性,事故现场如下:
int assum;
cin>>assum;
while(!cin.good())
{
cout<<"输入的数据类型不合法,请重新输入"<<endl;
cin>>assum;
}
这会出现死循环、无法进行输入的情况。
查阅了很多资料,给出的解决方法基本如下:
while(!cin.good())
{
cout<<"输入的数据类型不合法,请重新输入"<<endl;
cin.clear();
//cin.ignore()和cin.sync()二选一
cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
//需要include<limits>
//cin.sync();
cin>>assum;
}
cin.clear()可以清除错误标志,cin.ignore()可以忽略缓冲区内容直到遇到EOF。
然而我很绝望地发现,它们丝毫不起作用,我的程序依然在死循环。
好在最终我还是解决了这个问题:
while(!(cin>>assum))
{
cout<<"输入的数据类型不合法,请重新输入"<<endl;
getchar();
fflush(stdin);
cin.clear();
cin.sync();
}
似乎不写cin.sync()也可以。
参考链接如下: