C++基础:输入、输出和文件

1 C++输入和输出概述

1.1 流和缓冲区

C++程序把输入和输出看作字节流。通过使用流,C++程序处理输出的方式将独立于其去向。

因此管理输入包含两步:

1 将流与输入去向的程序关联起来。

2 将流与文件连接起来。

通常,通过使用缓冲区可以更高效的处理输入和输出。缓冲区时用作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储工具。

一些相关类

streambuf类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内容、刷新缓冲区、管理缓冲区内存的类方法。
ios_base类表示流的一般特征,如是否可读取、是二进制流还是文本流等。
ios类基于ios_base,其中包括了一个指向streambuf对象的指针成员。
ostream类是从ios类派生而来的,提供了输出方法。
istream类是从ios类派生而来的,提供了输入方法。
iostream类是基于istream和ostream类的,因此继承了输入方法和输出方法。

iostream类的8个流对象

cinwcin(处理wchar_t类型)对应于标准输入流,默认情况下这个流被关联到标准输入设备
coutwcout(处理wchar_t类型)对应于标准输出流,默认情况下这个流被关联到标准输出设备
cerrwcerr(处理wchar_t类型)对应于标准错误流,默认情况下这个流被关联到标准输出设备。不被缓冲。
clogwclog(处理wchar_t类型)对应于标准错误流,默认情况下这个流被关联到标准输出设备。被缓冲。

1.1.1 重定向

2 使用cout输出

ostream类最重要的任务之一就是将数值类型转换为以文本形式表示的字符流。

3 使用cin输入

3.1 流状态

cin或cout对象包含一个描述流状态的数据成员。流状态(被定义为iostate类型)由三个ios_base元素组成:eofbit、badbit或failbit,其中每个元素都是一位,可以是1(设置)或0(清除)。

当cin操作到达文件末尾时,他将设置为eofbit;

当cin操作未能读取到预期的字符时,它将设置failbit。

I/O失败(如试图读取不可访问的文件或试图写入开启写保护的磁盘),也可能将failbit设置为1.

在一些无法诊断的失败破坏流时,badbit元素将被设置。

流状态:

成员描述
eofbit如果到达文件尾,则设置为1
badbit如果流被破坏,则设置为1;例如,文件读取错误
failbit如果输入操作未能读取预期的字符或输出操作没有写入预期的字符,则设置为1
goodbit另一种表示0的方法
good()如果流可以使用(所有的位都被清除),则返回true
eof()如果eofbit被设置,则返回true
bad()如果badbit被设置,则返回true
fail()如果badbit或failbit被设置,则返回true
rdstate()返回流状态
exceptions()返回一个位掩码,指出哪些标记导致异常被引发
exceptions(iostate ex)设置哪些状态将导致clear()引发异常;例如,如果ex是eofbit,则如果eofbit被设置,clear()将引发异常
clear(iostate s)将流状态设置为s;s的默认值是0(goodbit),如果(restate()& exceptions())!= 0,则引发异常basic_ios::failure
setstate(iostate s)调用clear(rdstate()|s)。这将设置与s中设置的位对应的流状态位,其他流状态位保持不变。

cin.exceptions(ios_base::failbit);
// exceptions方法返回一个位字段,包含三位,对应eofbit,failbit,badbit,设置到哪个,就会在clear()时抛出对应的异常

4 文件输入和输出

打开多个文件:

可能需要依次处理一组文件,比如计算某个名称在10个文件中出现的次数。在这种情况下可以打开一个流,并将它依次关联到各个文件。

文件有文本格式和二进制格式。文本格式存储字符,二进制格式存储计算机内部表示。

文本格式便于读取,可以很方便地将文本文件从一个计算机系统传输到另一个计算机系统。

二进制格式对于数字来说比较精确,不会有转化误差或舍入误差,并且以二进制格式保存数据的速度更快,因为不需要转换,并且可以大块的存储数据。

但是,如果系统之间的内部表示不用,则二进制文件无法通用。

5 内核格式化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值