C++标准IO-输入状态
来源:互联网 发布:和程序员有关的网名 编辑:程序博客网 时间:2024/06/03 14:14
我们可以随意的输入输出数据了,但是我们输入的数据是否正确呢?下面我们学习下输入输出的状态标识的相关知识,C++中负责输入输出的系统包含了关于每一个输入输出操作的结果的记录信息,都被包含在了io_state类型的对象中。
io_state是一个枚举类型,包含下面的值:
goodbit 无错误
eofbit 已经到达了文件结尾
failbit 非致命的输入输出错误,可以返回
badbit 致命的输入输出错误,无法挽回
有两种方法可以获得输入输出的状态信息,一个方法是通过调用rdstate()函数,它将返回当前状态的错误标记,如果没有错误,将返回goodbit。
#include <iostream>
using namespace std;
int main(){
int a;
cin>>a;
cout<<cin.rdstate()<<endl;
if(cin.rastate==ios::goodbit)
cout<<"ok good!"<<endl;
else if(cin.rastate==ios_base::failbit)
cout<<"no failed!"<<endl;
else
cout<<"abcdefg!"<<endl;
}
另一个方法是使用下面任何一个函数来检测相应的输入和输出状态:
bool good()
bool fail()
bool eof()
bool bad()
#incledu <iostream>
using namespace std;
int main(){
int a;
cin>>a;
cout<<cin.rdstate()<<endl;
if(cin.good())
cout<<"ok good!"<<endl;
if(cin.fail())
cout<<"no fail!"<<endl;
}
如果错误发生了,那么状态标识就会被标记成相关的错误来,如果想程序能够继续正常的运行下去,必须清除错误状态,使用clear()函数即可。clear函数带一个参数,可以设置当前的标识值来,用ios::goodbit作为参数即可。
#include <iostream>
using namespace std;
int main(){
int a;
cin>>a;
cout<<cin.rastate()<<endl;
cin.clear(ios::goodbit);
cout<<cin.rdstate()<<endl;
}
通常当我们发现输入有错又需要改正的时候,使用clear函数更正标识为正确后,还需要使用get()成员函数清除输入缓冲区,以达到重复输入的目的。
#include <iostream>
using namespace std;
int main(){
int a;
while(1){
cin>>a;
if(!cin){ //可以改成cin.fail()
cout<<"error,input error!"<<endl;
cin.clear();
cin.get();
}
else{
cout<<a;
break;
}
}
}
下面再来个对文件流错误标记处理的例子:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream myfile("test.txt",ios_base::in,0);
if(myfile.fail()){
cout<<"ERROR!"<<endl;
}
else{
char ch;
while(myfile.get(ch))
cout<<ch<<endl;
if(myfile.eof())
cout<<"end of the file!"<<endl;
while(myfile.get(ch))
cout<<ch<<endl;
}
}
- C++标准IO-输入状态
- C++IO流-标准输入与输出
- C语言标准IO
- 标准C语言IO
- 标准C的IO
- 【C++】标准IO库
- 标准C语言 IO
- 【C】标准输入/输出
- io学习:标准输入、标准输出、标准出错
- 文件IO---标准输入、标准输出和标准错误
- 标准c的io操作
- C标准IO的操作
- C++primer 标准IO库
- [C++] C++的标准IO
- C++Primer 标准IO库
- C++:标准IO(输入输出)
- C++_Primer_chapter8 标准IO库
- c标准IO库使用
- 超文本传输协议-HTTP/1.1
- 《程序猿的搬砖生活》四、新的开始
- C++标准IO-串流类
- 读《小菜编程成长记》理解三层架构的一些记录
- android实现两个listview的同步滚动
- C++标准IO-输入状态
- ubuntu中svn客户端使用
- CodeRush教程二 代码风格
- zoj 3717 - Balloon(2-SAT)
- C++标准IO-文件的操作
- Delphi中or的使用
- C++标准IO-字符串操作类
- Spring第二个程序---依赖注入
- (win7)虚拟机和主机通信