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<iostream>
#include<iomanip>

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】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

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

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

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

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

(0)
上一篇 2023年3月2日 上午3:04
下一篇 2023年3月2日 上午3:05

相关推荐