对于标准输入流cin,有时该操作会发生错误,如:
#include<iostream>
using namespace std;
int main()
{
int val=0;
while(!(cin>>val))
{
cout<<"enter again"<<endl;
}
cout<<val<<endl;
cout<<"end"<<endl;
return 0;
}
当输入的不是整形int而是字符时,输入流就会发生错误。一个输入流一旦发生错误,其后的io操作都会失败。如上面的程序,当输入字符后,程序就进入死循环状态。这是因为一旦输入失败,会产生一个cin.fail()的错误状态。而要使用cin输入,则必须处于无错误状态,由于存在错误状态,所以程序处于死循环中。
修改如下:
#include<iostream>
using namespace std;
int main()
{
int val=0;
while(!(cin>>val))
{
cin.clear ();/*修改cin错误状态*/
cin.sync ();/*清空输入缓存区*/
cout<<"enter again"<<endl;
}
cout<<val<<endl;
cout<<"end"<<endl;
return 0;
}