C++ IO输入问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 06:39:48
int ival;

while(cin.clear(),cin>>ival,cout<<cin.bad(),cout<<cin.fail(),cout<<cin.eof(),cout<<cin.good(),!cin.eof())
{

if (cin.bad())
{
throw runtime_error("23232");
}
if (cin.fail())
{
cerr<<"bad data,try again";
cin.clear();
cout<<cin.bad();cout<<cin.fail();cout<<cin.eof();cout<<cin.good();
continue;
}

}
为什么输入字符的时候会进入死循环?
请大家帮忙看下
可能是我没说明白把
我的意思是 我输入一个字符后 出现流错误 而我在程序中重直了流的状态 应该是让我输入第二个字符 而这个程序却是输入一个字符后就 自动死循环,就好象跳过了while(cin.clear(),cin>>ival,cout<<cin.bad(),cout<<cin.fail(),cout<<cin.eof(),cout<<cin.good(),!cin.eof())中 cin>>ival,这句后无限循环

int ival;

while(cin.clear(),cin>>ival,cout<<cin.bad(),cout<<cin.fail(),cout<<cin.eof(),cout<<cin.good(),!cin.eof())
{

if (cin.bad())
{
throw runtime_error("23232");
}
if (cin.fail())
{
cerr<<"bad data,try again";
cin.clear();
cout<<cin.bad();cout<<cin.fail();cout<<cin.eof();cout<<cin.good();
cin.sync(); //cin中依然存放不匹配数据,所以要先清空
cin.clear();
continue;
}
}

看看效果如何。
while(cin.clear(), cin.ignore(),cin>>ival,cout<<cin.bad(),cout<<cin.fail(),cout<<cin.eof(),cout<<cin.good(),!cin.eof())

因为你的执行语句每次都正确调用,所以判断条件恒为true