C++中输入流cin的一个有关问题
C++中输入流cin的一个问题
在学习C++Primer的时候,第八章IO流,我写了以下的代码:
而我的运行界面如下:

不是执行了cin.clear()了吗?为什么第二个cin>>iValue;没被执行呢?
------解决方案--------------------
输入a2后,缓存区的数据是a2,你cin.clear()之后,cin恢复正常,但缓存区仍有数据a2,不再需要你输入数据而此时cin>>iValue;同样发送错误。
可以通过在cin.clear()后清空缓存区来解决问题,fflsuh(stdin);
------解决方案--------------------
明显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;
}
而我的运行界面如下:
不是执行了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,表明输入流已恢复正常
}