【问题】:
#include <iostream>
using namespace std;
int main()
{
int a;
while(1)
{
cin>>data;
if(data==0)
break;
}
return 0;
}
如果以上代码的程序运行时,输入的数不是整数,而是字符,则cin就会出错,导致while死循环
【原因分析】:
当cin尝试将输入的字符读为int型数据失败后,会产生一个错误状态cin.fail()。
而要用cin读取输入流中的数据,输入流必须处于无错误状态。因此,由于错误状态的存在,会一直执行while循环。
【解决办法】:
while(1)
{
if (!cin.fail())
{
cout<<"input"<<endl;
cin>>data;
}
else
{
cin.clear();//清除std::cin的错误状态
cin.sync();//清空输入缓冲区
cout<<"input again"<<endl;
cin>>data;
}
if (data==0)
{
break;
}
}