C++ 第17章 输入、输出和文件(iostream/ostream/fstream)

17.1 C++输入和输出概述

C++程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插入到输出流中。流充当流程序和流源(输入:键盘、文件、存储设备、其他程序)或流目标(输出:屏幕、打印机、存储设备、其他程序)之间的桥梁,C++程序只是检查字节流,而不需要知道字节来自何方去向何处。
在这里插入图片描述

缓冲区是用作中介的内存块,它是将信息从设备传输到程序或从程序传输到设备的临时存储工具。通过使用缓冲区可以更高效地处理输入和输出,因为从内存中读取单个字节往往比从从设备中读取单个字节快的多,可以先将大量数据填满缓冲区。
键盘输入每次提供一个字节,因此在这种情况下,程序无需缓冲区来帮助匹配不同的数据传输速率,然而,对键盘输入进行缓冲可以让用户在将输入传输给程序之前返回并更正。C++程序通常在用户按下回车键时刷新输入缓冲区。

在这里插入图片描述
在这里插入图片描述
(一些实现、管理流和缓冲区的类)

在这里插入图片描述
(iostream类的流对象,流对象将包含存储类与输出有关的信息的数据成员)

重定向:标准输入和输出流通常连接着键盘和屏幕。重定向就是改变标准输入和标准输出,输入重定向(<),输出重定向(>)
标准输出重定向不会影响cerr或clog,仍然会将错误信息显示到屏幕上。

17.2 使用cout进行输出

<<是重载运算符,重载为输出,他可以输出C++中所有基本类型(unsigned char /signed char/char/short/unsigned short/int/unsigned int/long/unsigned long /long long/unsigned long long/float/double/long double),指针类型(const signed char/const unsigned char/const char/void

yi在这里插入图片描述
(通过返回一个指向ostream对象的引用来获得连续拼接)

其他ostream方法:
put():显示字符
write():显示字符串,第一个参数提供要显示字符串的地址,第二个参数指出要显示多少个字符,返回cout对象
(可以连续拼接)
(注意:cout是调用方法的对象,put(),write()是类成员函数)

一般地,由于ostream类对cout对象处理的输出进行缓冲,所以输出不会立即发送到目标地址,而是被存储在缓冲区,直到缓冲区填满。然后,程序将刷新缓冲区,把内容发送出去,并清空缓冲区,以存储新的数据。但是在屏幕输出时,程序不必等到缓冲区被填满。(将换行符发送到缓冲区;程序等到输入(输出之后有cin);flush(cout);endl;都可以刷新缓冲区)

在这里插入图片描述

修改显示时使用的计数系统:(如二进制显示、十进制显示(dec/hex/oct))
在这里插入图片描述

调整字段宽度:(将长度不同的数字放到宽度相同的字段中)
在这里插入图片描述
(width()方法只影响接下来显示的一个项目,然后字段宽度将恢复为默认值)

填充字符:
在默认情况下,cout用空格填充字段中未被使用的部分,可以用fill()成员函数来改变填充字符。
在这里插入图片描述
(一直有效)

设置浮点数的显示精度:
在默认情况下,它显示的是总位数。
在这里插入图片描述
(一直有效)

打印末尾的0和小数点:
在这里插入图片描述
(显示末尾小数点和末尾的0)
setf()方法控制来被显示时的不同模式
在这里插入图片描述

头文件iomanip:
setprecision():接受一个指定字段宽度的整数参数。
setfill():接受一个指定填充字符的char 参数。
setw():接受一个指定字段宽度的整数参数。

17.3 使用cin进行输入

>>是重载运算符,重载为输入,他可以输出C++中所有基本类型(unsigned char /signed char/char/short/unsigned short*/int*/unsigned int*/long*/unsigned long* /long long*/unsigned long long*/float*/double*/long double*),指针类型(const signed char*/const unsigned char*/const char*)

读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容。

流状态有3个ios_base元素组成:eofbit/badfit/failfit,其中每个元素都是一位,可以是1(设置)或0(清除)。
在这里插入图片描述

设置状态:
clear():清除状态位
setstate():设置状态位

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他istream方法:
read():读取指定数目的字节,并将他们存储在指定的位置中。第一个参数是地址,第二个参数是字节数。
peek():返回输入中的下一个字节,但不抽取输入流中的字符。它使得能够查看下一个字符。
gcount():返回最后一个非格式化抽取方法读取的字符数。这意味着字符由get()、getline()、ignore()或read()方法读取的,不是由抽取运算符>>读取的,抽取运算符对输入进行格式化,使之与特定的数据类型匹配。
putback():将一个字符插入到输入字符串中,被插入的字符将是下一条输入语句读取的第一个字符。

17.4 文件输入和输出

在这里插入图片描述
(以默认模式打开文件进行输出将自动把文件的长度截短为零,这相当于删除已有内容)
由于ostream是ofstream的基类,因此可以使用所有的ostream方法。
在这里插入图片描述
(其实就是将cout/cin对象变成ifstream/ofstream创建的对象)

打开多个文件:
在这里插入图片描述
(可以只创建一个流,并将其依次关联到各个文件)

在这里插入图片描述
(为open()的第二个参数,表示文件模式,如读、写追加等)
在这里插入图片描述

随机存取:指的是直接移动到文件的任何位置。随机存取常被用于数据库文件,程序维护一个独立的索引文件,该文件指出数据在主数据文件中的位置,这样,程序便可以直接跳到这个位置,读取其中的数据。

17.5 内核格式化

读取string对象中的格式化信息或将格式化信息写入string对象被称为内核格式化(incore formatting)。
istringstream类允许使用istream方法族读取istringstream对象中的数据,istringstream对象可以使用string对象进行初始化。
sstream 头文件定义了一个从ostream类派生而来的 ostringstream 类(还有一个基于wostream 的wostringstream 类,这个类用于宽字符集)。可以将可用于cout的方法用于 ostringstream 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值