C++中流的错误状态 –eof、fail、bad、good、rdstate

流的状态可以通过检测ios_base类中的位来判断。

1)当输入流遇到文件尾时,eofbit位将被设置。

可以调用函数cin.eof()来判断是否到达文件末尾

在cin中遇到问价末尾时返回true,否则返回false。

2)当在流中发生格式错误时,failbit位将被设置。

例如程序要求输入整数,但是在输入流中有非整数的字符的情况。在遇到这种错误时,这些字符不会丢失。

成员函数fail将报告流操作失败了,通常这种错误是可以恢复的。

3)当发生数据丢失时,将会设置badbit位。

成员函数bad将报告流操作是否失败了。一般情况下,这种严重的错误是不能修复的。

4)如果流中的eofbit、failbit 和 badbit位都没有被设置,那么goodbit位将被设置

即如果函数eof, fail 和 bad都返回false值,则成员函数good返回true值。I/O操作只在“好的”流中才能进行。

5)成员函数rdstate返回流中的错误状态。

例如,通过调用cout.rdstate返回流的状态,然后通过switch语句检查eofbit、badbit、failbit 和 goodbit来检查这些状态。

检测流状态的首选方法是使用成员函数eof, fial, bad 和 good, 使用这些函数不要求了解具体的状态位。

6)clear成员函数将流的状态重置为“好的”,使得流可以继续执行I/O操作。

clear函数的默认参数goodbit所以语句

cin.clear()

清空了cin, 并且为该流设置goodbit位。

语句cin.clear(ios::failbit)则为流设置failbit位。

注意:

如果failbit位 和 badbit位其中至少一个被设置, 则basic_ios的成员函数operator!返回true;operator void*返回false值(0)

示例代码:

include

#include

using namespace std;

int main()

{

int integerValue;

cout<<"Before a bad input operation:"

<<"\ncin.rdstate():"<<cin.rdstate()

<<"\ncin.eof():"<<cin.eof()

<<"\ncin.fail():"<<cin.fail()

<<"\ncin.bad():"<<cin.bad()

<<"\ncin.good():"<<cin.good()

<<"\n\nExpects an integer, but enter a character:";

cin>>integerValue;

cout<<endl;

cout<<"After a bad input operation:"

<<"\ncin.rdstate():"<<cin.rdstate()

<<"\ncin.eof():"<<cin.eof()

<<"\ncin.fail():"<<cin.fail()

<<"\ncin.bad():"<<cin.bad()

<<"\ncin.good():"<<cin.good()<<endl<<endl;

cin.clear();

cout<<"After cin.clear()"<<"\ncin.fail():"<<cin.fail()

<<"\ncin.good():"<<cin.good()<<endl;

return 0;

}
原文链接: https://www.cnblogs.com/ruigelwang/p/12805828.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/196722

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:20
下一篇 2023年2月12日 下午7:20

相关推荐