您的位置:首页 > 其它

cin.clear()与cin.sync()与cin.ignore()

2011-11-04 21:16 369 查看
阅读程序一与程序二:

一:

#include<iostream>

using namespace std;

int main()

{

 int a;

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

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

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

 //cin.clear();

 //cin.sync();

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

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

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

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

 //cin.sync();

 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,表明输入流已恢复正常

 return 0;

}

二:

int main()

{

 int a;

 while(cin>>a){

  cout<<a;

 }

 cin.clear();//修复输入流(因为上面的回车符也进入了缓冲区)

 cin.sync();//清除缓冲区(非法字符‘回车符’)

 while(cin>>a){

  cout<<"a="<<a<<endl;

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工作