C++中输入流cin的一个有关问题

C++中输入流cin的一个问题
在学习C++Primer的时候,第八章IO流,我写了以下的代码:

#include <iostream>
#include <string>
using namespace std;

int main( void )
{
int iValue;
if ( !( cin >> iValue ) ){
cerr << "输入流出错." << endl;
}

cin.clear();
cin >> iValue;
if ( cin.good() ){
cout << "输入流正常" << endl;
}
if ( cin.fail() ){
cout << "输入流再次出错" << endl;
}

return 0;
}


而我的运行界面如下:
C++中输入流cin的一个有关问题
不是执行了cin.clear()了吗?为什么第二个cin>>iValue;没被执行呢?

------解决方案--------------------
输入a2后,缓存区的数据是a2,你cin.clear()之后,cin恢复正常,但缓存区仍有数据a2,不再需要你输入数据而此时cin>>iValue;同样发送错误。
可以通过在cin.clear()后清空缓存区来解决问题,fflsuh(stdin);
------解决方案--------------------
明显cin已经出错,可以参考一下这个例子:



#include <iostream> 

using namespace std; 

void main() 



    int a;  

    cout<<"输入一个字母:"<<endl;  

    cin>>a;                //int型变量中放了char型数据,failbit置1 

    cout<<"cin.fail()="<<cin.fail()<<endl;            //输出1  

    cout<<"输入一个数字:"<<endl;    //由于failbit值为1,输入流不能正常工作 

    cin>>a;                        //故此处的输入无效 

    cout<<a<<endl;                //输出不确定值  

    cin.clear();                //此处用cin.clear()流标志复位      

    cout<<"cin.fail()="<<cin.fail()<<endl;        //此处failbit已为0 
    
    cout<<"输入一个数字:"<<endl;      //但刚才输入的字符并没有从流中清除,所以cin>>a又把那个字符放入a中,流输入流又不能正常工作
  
    cin>>a;  

    cout<<a<<endl;    //输出不确定值

    cout<<"cin.fail()="<<cin.fail()<<endl;    //在此处failbit又为1 

    cin.clear();            //再次修复输入流 

    cin.ignore();            //取走刚才流中的字符  

    cout<<"输入一个数字:"<<endl;    //再次接收用记输入,这次输入数字,正常输出了 

    cin>>a;  

    cout<<"a="<<a<<endl;     //现在再看一下输入流的failbit  

    cout<<"cin.fail()="<<cin.fail()<<endl;//输出0,表明输入流已恢复正常 

}