8.1.1 IO
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的更多相关文章
- VS2015编译GEOS
下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...
- 高性能IO模型浅析
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ...
- 深究标准IO的缓存
前言 在最近看了APUE的标准IO部分之后感觉对标准IO的缓存太模糊,没有搞明白,APUE中关于缓存的部分一笔带过,没有深究缓存的实现原理,这样一本被吹上天的书为什么不讲透彻呢?今天早上爬起来赶紧找了 ...
- [APUE]标准IO库(下)
一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
- Performance Monitor4:监控SQL Server的IO性能
SQL Server的IO性能受到物理Disk的IO延迟和SQL Server内部执行的IO操作的影响.在监控Disk性能时,最主要的度量值(metric)是IO延迟,IO延迟是指从Applicati ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
随机推荐
- 885.求组合数 I(模板)
O(n^2) 数据范围 a*b =4e6 根据组合数公式: 代码: import java.util.Scanner; public class Main{ static final int N=2 ...
- conda使用以前安装的python环境
在装anaconda时,很多时候,我们自己之前安装了python环境,里面装了很多的包,不想换,所以想直接使用原来的python环境,所以可以使用以下命令: conda create --prefix ...
- PIE-SDK For C++矢量数据空间索引的创建
1.功能简介 空间索引的使用便于数据的查询:所以在创建矢量数据的时候创建空间索引,下面对矢量数据如何创建空间索引进行功能介绍. 2.功能实现说明 2.1 实现思路及原理说明 第一步 创建矢量要素数据集 ...
- vue报错There are multiple modules with names that only differ in casing. This can lead to unexpected behavior when compiling on a filesystem with other case-semantic. Use equal casing. Compare these mod
今天在开发一个新项目时,当安装完依赖包启动项目后报了一个这个错 There are multiple modules with names that only differ in casing.Thi ...
- Java String类型转换成Date日期类型
插入数据库时,存入当前日期,需要格式转换 import java.text.SimpleDateFormat; formatter = new SimpleDateFormat( "yyyy ...
- 使用ResXmanager实现多语言[转]
1 多國語系 - 使用RESXMANAGER管理資源檔 1.1 前言 在實作多國語系網站時,針對靜態文字多會使用資源檔(Resource)來對應出各語系所需顯示的內容.由於資源檔可能會依照特定結構放式 ...
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Banana
签到题 50的规模,随便搞搞都能过,用stl的string的搜索直接做了 #include <bits/stdc++.h> using namespace std; typedef lon ...
- CPPU OJ | 开发日志
2019.12.18 ~ 2019.12.22 用腾讯云的学生服务器测试搭建OJ(踩了无数的坑) 2019.12.25 ~ 2019.12.28 在模管中心办理申请虚拟服务器的手续 2019.12.3 ...
- SVN之TortoiseSVN使用02
TortoiseSVN常用操作和安装eclipse的svn插件 一.关于TortoiseSVN的介绍 1. 安装TortoiseSVN图像化操作软件,便于操作SVN! 如图有两种版本的,一个是32位, ...
- Ionic 使用 NFC
Ionic 使用 NFC 哎哟喂,因为项目需要使用 Ionic 调用手机 NFC 功能,踩了好多坑,真的是,不过终于不负众望拿到了id.现在就记录一下我的步骤和踩过的坑! 步骤 我装的Ionic可能是 ...