cin为什么会出现死循环, cin.clear(istream:failbit)不起作用

cin为何会出现死循环, cin.clear(istream::failbit)不起作用

  
  当输入非数值时,例如输入a,则出现死循环。
  在这一判断条件if(cin.fail()),问题出现在那?(编程环境为VS 2012)


int main()
{
int val;

while(cin>>val,!cin.eof())
{
        if(cin.bad())
{
cerr<<"bad,error!"<<endl;
exit(-1);
}
if(cin.fail())
{
cerr<<"fail,illegal vale,try again!"<<endl;

  cin.clear(istream::failbit);
  continue;

}

if(cin.good())
{
cerr<<"good"<<endl;
}


}
return 0;
}
cin死循环 cin.fail()  cin.clear()

------解决方案--------------------
while(cin>>val 
------解决方案--------------------
!cin.eof())
{
if(cin.bad())
{
cerr<<"bad,error!"<<endl;
exit(-1);
}
if(cin.fail())
{
cerr<<"fail,illegal vale,try again!"<<endl;

//cin.clear((istream::failbit);
cin.setstate(istream::eofbit);
continue;

}

if(cin.good())
{
cerr<<"good"<<endl;
}


}


设置失败的状态就可以了。。
------解决方案--------------------
例如输入a,则出现死循环。
----- 你还需要将已经输入的a弄掉,否则a还一直在那里被你循环读
------解决方案--------------------
# include <iostream>
 
using namespace std;
 
int main()
{
    int val;
    while (cin >> val, !cin.eof())
    {
        if (cin.bad())
        {
            cerr << "bad, error!" << endl;
            exit(-1);