IO对象无拷贝或赋值。进行IO操作的函数通常以引用的方式传递和返回流,且该引用不能是const的

确定一个流对象是否处于良好状态的最简单的方法是将它作为一个条件来使用

while (cin >> word)//只有当按下回车才会开始读取输入流,然后依次处理流中的数据,处理完之后(如果流中没有错误数据或文件结束标识),等待下次流的输入,按下回车后读取流,直到遇到错误数据或文件结束标识则结束cin流。



        流的状态就像汇编里的标志寄存器,用给特定的二进制位置位来反馈对应状态。

        如果到达文件结束或流读取结束位置,eofbit和failbit都会被置位,badbit、eofbit、failbit被置位时,failbit都会被置位。

badbit表示系统及错误,如不可回复的读写错误。通常情况下,一旦badbit被置位,流就无法使用了。在发生可恢复错误后,failbit被置位,如期望读取熟知却读取出一个字符等错误。

goodbit在所有错误位均未置位时返回true.若到达文件末尾,即使将流标志位全部复位,也不能再输出数据。

cin.clear(cin.rdstate() & ~cin.failbit & ~cin.badbit);//将failbit和badbit复位,但保持eofbit不变。 Cin.rdstate()表示当前流的标志位状态,~failbit表示将cin流的badbit位置0,其他位均值1,~cin.failbit表示将cin流的failbit 位置0,其他位置1,将三者按位取与,即可达到预期的效果。(cin.failbit表示将cin流的failbit位置1,其他位置0)

cin.ignore(100,'\n')

• 作用是把你“按回车“之前的输入从缓冲区内清除,保证对下次的Cin没影响。忽略回车前的前100个字符,从上一次流的读取位置开始算。

• 或者大于100个字符的输入也被清除。

刷新缓冲区就是数据真正写到输出设备或文件

刷新条件:缓冲区满了,endl,flush, ends, unitbuf等操作符

 endl换行后刷新缓冲区,flush刷新缓缓冲区,ends输出一个空格后刷新缓冲区。

unitbuf在每次输出操作后都进行一次flush刷新,而nounitbuf则恢复正常的缓冲区刷新机制。Cout << unitbuf; cout << nounitbuf;

如果程序异常终止,输出缓冲区是不会被刷新的。

当一个输入流被关联到一个输出流时,任何试图从输入流读取数据的操作都会先刷新关联的输出流。标准库将cout和cin关联在一起,因此下面语句:cin >> ival导致cout的缓冲区被刷新,也就是当前输入缓冲区内所有内容都将被输出。

8.1.1 IO的更多相关文章

  1. VS2015编译GEOS

    下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...

  2. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  3. 深究标准IO的缓存

    前言 在最近看了APUE的标准IO部分之后感觉对标准IO的缓存太模糊,没有搞明白,APUE中关于缓存的部分一笔带过,没有深究缓存的实现原理,这样一本被吹上天的书为什么不讲透彻呢?今天早上爬起来赶紧找了 ...

  4. [APUE]标准IO库(下)

    一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...

  5. [APUE]标准IO库(上)

    一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...

  6. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  7. [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化

    KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...

  8. [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化

    KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...

  9. Performance Monitor4:监控SQL Server的IO性能

    SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...

  10. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

随机推荐

  1. Largest Rectangle in a Histogram POJ - 2559

    很显然是单调栈 这里记录一种新的写法,这种写法基于递推,但是相比之下比单调栈更好写 #include<cstdio> #include<map> #include<set ...

  2. excel给一列数据添加前缀和后缀

    1.选中一列单元格后设置单元格格式,在自定义中输入-----“前缀”@(前缀为需要添加的内容) 输入----@“后缀” 2.字符串拼接:“前缀”&B1,B1&“后缀”

  3. java连接Sqlserver数据库问题总结

    网上说的要在:Sqlserver配置管理器中设置SQL Server网络配置->SQLEXPRESS的协议->TCP/IP的方法试了没啥用 不知道是不是自己测试设置的时候改了啥参数给整好了 ...

  4. PP: Taking the human out of the loop: A review of bayesian optimization

    Problem: Design problem parameters consist of the search space of your model. Scientists design expe ...

  5. 1级搭建类112-Oracle 19c SI FS(CentOS 8)

    Oracle 19c 单实例文件系统在 CentOS 8 上的静默安装

  6. jQuery---美女相册案例

    美女相册案例 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...

  7. js -- 移动端pc端自动切换

    1. 判断浏览器类型 浏览器判断使用的github开源项目current-device,下面是地址: https://github.com/matthewhudson/current-device 在 ...

  8. 【巨杉数据库SequoiaDB】企业级和开源领域“两开花”,巨杉引领国产数据库创新

    2019年12月15日,OSC 源创会·年终盛典在深圳圆满举行.巨杉数据库作为业界领先的金融级分布式数据库厂商, 获得 “2019年开源数据库先锋企业” 及 “2019 GVP-Gitee最有价值开源 ...

  9. 修改或忘记MySQL密码

    一.创建/修改MySQL密码 刚装好只能允许一个本地账户root@localhost访问 刚开始默认无密码 新增密码root,输入此命令后回车再回车即可 修改密码,输入此命令后回车,输入原密码后回车即 ...

  10. 51Nod 1091 线段的重叠 (贪心)

    X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...