C++之IO流的状态

荒凉一梦 提交于 2020-03-30 09:00:33
 1 #include <iostream>
 2 #include <fstream>
 3 
 4 using  namespace std;
 5 
 6 void check_cin (istream &is)
 7 {
 8     if(is.bad())//系统级的错误才会bad
 9     {
10         cout<<"cin bad()"<<endl;
11     }else{
12         cout<<"cin not bad()"<<endl;
13     }
14 
15     if(is.fail())//
16     {
17         cout<<"cin fail()"<<endl;
18     }else{
19         cout<<"cin not fail()"<<endl;
20     }
21 
22     if(is.eof())//输入结束的时候是eof
23     {
24         cout<<"cin eof()"<<endl;
25     }else{
26         cout<<"cin not eof()"<<endl;
27     }
28 
29 
30     if(is.good())//
31     {
32         cout<<"cin good()"<<endl;
33     }else{
34         cout<<"cin not good()"<<endl;
35     }
36 
37 }
38 
39 int main()
40 {
41     cout<<"检查cin的状态,一下四个状态"<<endl;
42 //    cin.setstate(istream::badbit); //强制将流的状态设置为bad
43 //    cin.setstate(istream::failbit);
44 //    cin.setstate(istream::badbit | istream::failbit);
45 //    cin.clear(istream::badbit)//可以清除某一个状态
46 
47 
48 //    istream::iostate old_state=cin.rdstate();//将流的状态保存下来
49 //    .........
50 //    cin.clear(old_state)//用完以后然后还原成原来保存下来的状态
51 
52 
53 
54     check_cin(cin);
55     cout<<"请输入一个数"<<endl;
56     int n;
57     cin>>n;
58     cout<<"再次检查状态"<<endl;
59     check_cin(cin);
60 
61     cout<<"============================="<<endl;
62     int i=0,val;
63 //    while(cin>>val)
64 //    {
65 //        i+=val;
66 //        cout<<"sum is"<<i<<endl;
67 //    }
68 
69     while(cin>>val,!cin.eof())
70     {
71         if(cin.bad())
72         {
73             throw runtime_error("IO CORRUPED");
74         }
75         if(cin.fail())
76         {
77             cout<<"输入的数据是错的"<<endl;
78             cin.clear(); //清空恢复成正常的流
79             cin.ignore(200,'\n'); //对不对的数据进行清除要么是200个要么是换行
80             continue; //继续循环
81         }
82         i+=val;
83         cout<<"sum is"<<i<<endl;
84     }
85 
86     return 0;
87     //预处理进行调试
88     #ifdef NDEBUG
89     cout<<""<<endl;
90     #endif // NDEBUG
91 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!