首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++的一个IO有关问题

2012-03-05 
C++的一个IO问题?这是C++ Primer里的一段代码。但是看代码的愿意,要是我输入整数的时候敲了一个字符进去,它

C++的一个IO问题?
这是C++ Primer里的一段代码。
但是看代码的愿意,要是我输入整数的时候敲了一个字符进去,它应该输出Failed!以后再提示我Enter,
可是我一旦输入字符,她就不断地Faile! Enter: Failed! Enter:……了
这是怎么回事?

C/C++ code
int n;while (cout << "Enter: ", cin >> n, !cin.eof()){    if (cin.bad()) throw runtime_error("IO error!");    if (cin.fail())    {         cerr << "Failed!" << endl;         cin.clear();         continue;    }}


[解决办法]
taodm果然厉害!
为什么要这样加呢?
输入缓冲的清空和输出缓冲的清空, 都可以通过sync()来完成.
cout.sync();
使得所有输出缓冲中的内容被写到标准输出上.
cin.sync();
使得所有输入缓冲中未被读取的内容从此被忽略.
加上cin.ignore()也是可以的。

C/C++ code
//Run on VC2005+WinXPSP2#include <iostream>using namespace std;int main(){int n;while (cout << "Enter: ", cin >> n, !cin.eof()){    if (cin.bad()) throw runtime_error("IO error!");    if (cin.fail())    {         cerr << "Failed!" << endl;         cin.clear();         cin.ignore();         continue;    }}}
[解决办法]
C/C++ code
**************************************************************************/   /*有关cin.fail(),cin.clear(),cin.sync的应用*/    /*************************************************************************/    /*     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,表明输入流已恢复正常*//************************************************************************************//****************************************************************//*switch与case匹配的问题*//****************************************************************//*第一种处理方法*//*int choice=1;while(choice==1){      int which;    cout<<"请选择所需要的服务:";    cin>>which;             if (cin.fail()) {     /////////加这一段 输入错误时(要输入数而输入的是字符。。)不会出现死循环          cout<<"输入错误!"<<endl;          cin.clear();          //cin.sync();    cin.ignore();            continue;//终止本次循环   继续下一次循环       }       switch(which)      {    case 1:     cout<<"the first!"<<endl;     break;//break语句用在循环语句的循环体内的作用是终止当前的循环语句    case 2:     cout<<"the secong!"<<endl;     break;    default:     cout<<"输出错误!!"<<endl;    } 

热点排行