关于输入流的错误

Posted on 2009-06-21 22:09 天边蓝 阅读(481) 评论(0)  编辑 收藏 引用 所属分类: cplusplus

来源:http://blog.vckbase.com/bruceteen/archive/2005/06/29/8952.html

 1 ]#include  < iostream >
 2 #include  < limits >
 3 using   namespace  std;
 4
 5 int  main()
 6 {
 7      int  n  =   0 ;
 8      while ! (cin >> n) )
 9      {
10         cin.clear();
11         cin.ignore( numeric_limits < streamsize > ::max(),  ' \n '  );  //  cin.sync()
12         cout << " Error " << endl;
13     }

14
15     cout  <<   " ------------\n "   <<  n  <<  endl;
16      return   0 ;
17 }

18
19



cin.clear()恢复正确标志位
cin.ignore流中错误的数据抛弃掉

为了进一步查看输入流的状态,可以通过以下代码测试:
http://blog.csdn.net/SearchLife/archive/2008/12/10/3491768.aspx

#include <iostream> 
using namespace std; 

int main() 

        
int a; 
        cin
>>a; 
        cout
<<cin.rdstate()<<endl; 
        
if(cin.rdstate() == ios::goodbit)
{
cout
<<"输入数据的类型正确,无错误!"<<endl; 
             }
 
        
if(cin.rdstate() == ios_base::failbit) 
        

                cout
<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl; 
        }
 
}





我们定义要输入到的变量是整型,但如果我们输入了英文字母或者汉字,那就会发生错误,cin里有个方法能检测这个错误,就是cin.rdstate();
当cin.rdstate()返回0(即ios::goodbit)时表示无错误,可以继续输入或者操作,若返回4则发生非致命错误即ios::failbit,则不能继续输入或操作.而cin.clear则可以控制我们此时cin里对这个问题的一个标识.语发如下:
cin.clear(标识符);
标识符号为:

goodbit 无错误
Eofbit 已到达文件尾
failbit 非致命的输入/输出错误,可挽回
badbit 致命的输入/输出错误,无法挽回
若在输入输出类里.需要加ios::标识符号

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


Copyright © 天边蓝