您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 1浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

标准库(二)输入输出类概述1

我什么都布吉岛 发布时间:2021-11-04 13:45:42 ,浏览量:1

C++作为一种面向对象的语言,处理输入和输出都是通过一系列定义在标准库的类来完成的。IO库可以读写内置类型,用户也可以通过定义自己的IO操作,读取自己专属的IO操作。C++处理IO的主要思想是“流”,数据和水流一样,写入和读出。

一、IO类有那些?

最常见的流是关联到控制台的,用户的所有操作(键盘输入、屏幕显示)都是在这样的流中完成的,没错他就是标准输入输出(iostream),另外一个常见的流就是文件流(fstream),输入输出操作都是关联到文件的,最后一个就是字符串流(sstream),这样的流一般用于程序,流方式处理有时候会有意想不到的用处。

总结一下,IO类可以分为:

  • iostream
  • fstream
  • sstream

C++对上述三种流对象处理非常统一,主要得益于继承机制。fstream和sstream都是继承于iostream的,所以你怎么使用iostream,你就能怎么使用fstream和sstream。每个进程都将会打开三个文件描述符,分别是标准输入流,标准输出流和标准错误流,通常,标准输入是键盘设备、标准输出流和错误输出流是显示器设备文件。

C++预定了一些流对象实例: 1

二、流状态的管理和查询

使用一个IO难免会遇到错误,根据严重程度可分为可恢复和不可恢复错误。IO类定义了一些列函数和标志,帮助我们管理和查询流的条件状态(condition state)。

在这里插入图片描述

状态含义strm::iostate条件状态完整功能strm::badbit流已崩溃strm::failbitIO操作失败strm::eofbit流到达了末尾strm::goodbit流没有发生错误,保证为0s.eof()eofbit置位,返回truestrm::fail()failbit或者badbit置位,返回trues.bad()badbit置位,trues.good()运行良好,trues.clear()无返回值,恢复流有效状态s.clear(flags)按照flagsg将流复位。flags是strm::iostate类型s.setstate(flags)按照flagsg将流设置。flags是strm::iostate类型s.rdstate()返回条件状态strm::iostate

每一个流设备都定义了条件状态,也就是与机器无关的strm::iostate,它包含以下方面的状态:

  • strm::badbit
  • strm::failbit
  • strm::eofbit
  • strm::goodbit

可以通过strm.setstate来设置这些位。如下,我们先通过rdstate()读出此时流条件状态,再用位操作将其复位:

cin.clear(cin.rdstate()&~cin.failbit&~cin.badbit);

下面是这些状态在几种情况的条件状态情况:

情况状态可恢复性系统级错误badbit置位否类型不匹配错误failbit置位是文件结束eofbit和failbit均置位?没有错误goodbit为0/

将一个流作为判断条件,其实就是判断badbit failbit eofbit是否被置位,条件状态将会被转换成false,表示流状态检测失败;反之一切正常,将会返回true。

一般的定义是复位使输出从1回到0;置位使输出从0变为1

三、输出流缓冲管理

每一个输出流都管理一个缓冲区,用户保存程序读写的数据。

os            
关注
打赏
1658157489
查看更多评论
0.0352s