C++常用流类型

C++ 的输入与输出包括以下3方面的内容:

(1) 对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准 I/O 。

(2) 以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件 I/O 。

(3) 对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入和输出称为字符串输入输出,简称 I/O 。

常用的输入输出流如下:

类名作用头文件
istream通用输入流iostream
ostream通用输出流iostream
iostream通用输入输出流iostream
ifstream文件输入流fstream
ofstream文件输出流fstream
fstream文件输入输出流fstream
istringstream字符串输入流sstream
ostringstream字符串输出流sstream
stringstream字符串输入输出流sstream

流的四种状态

C++输入输出流(IO流)有四种状态标志,用于指示流的当前状态。这些状态对于错误处理和流控制非常重要。

四种状态标志

goodbit (0)

eofbit (1)

failbit (2)

badbit (4)

状态检查函数

除了上述特定状态检查函数外,还有一些综合性的检查函数:

operator bool() 或 !stream

stream.rdstate()

状态重置函数

stream.clear()

stream.clear(state)

stream.setstate(state)

状态标志的应用场景

文件操作错误处理

输入验证

格式化输入输出

标准输入输出流

标准输入流

C++标准输入流是C++标准库中用于处理输入操作的一部分,主要通过<iostream>头文件中的std::cin对象实现。

基本输入

连续输入多个值

输入流的状态

cin对象有几个状态标志,可以用来检查输入操作是否成功:

常用成员函数

  1. cin.get() - 读取单个字符

  1. cin.getline() - 读取一行

  1. cin.ignore() - 忽略字符

  1. cin.peek() - 查看下一个字符但不取出

  1. cin.clear() - 清除错误状态

与字符串流结合使用

处理输入错误

Note

  1. 输入操作可能会失败,特别是当输入的数据类型与变量类型不匹配时。

  2. 使用cin读取数值后,缓冲区中可能会留下换行符,这可能会影响后续的输入操作。

  3. 对于读取整行文本,建议使用getline()函数而不是cin >>操作符。

标准输出流

C++标准输出流是C++标准库中用于处理输出操作的一部分,主要通过<iostream>头文件中的std::cout对象实现。

基本输出

输出多个值

格式化输出

使用<iomanip>

使用流操纵算子

常用成员函数和操作

cout.width() - 设置宽度

cout.precision() - 设置精度

cout.fill() - 设置填充字符

cout.flush() - 刷新缓冲区

自定义类的输出

可以通过重载<<运算符来实现自定义类的输出:

输出到文件

使用<fstream>库可以将输出重定向到文件:

输出到字符串

使用<sstream>库可以将输出重定向到字符串:

Note

  1. 输出操作可能会受到缓冲区的影响,使用endlflush()可以立即刷新缓冲区。

  2. 格式化设置(如精度、宽度等)通常只影响下一次输出操作。

  3. 在多线程环境中,标准输出流可能需要同步机制来避免输出混乱。

文件输入输出流

文件输入流

文件输入流(File Input Stream)是C++标准库提供的用于从文件读取数据的机制,主要通过<fstream>头文件中的std::ifstream类实现。

基本用法

1. 包含必要的头文件

2. 打开文件

3. 检查文件是否成功打开

4. 读取文件内容

逐字符读取

按行读取

读取格式化数据

5. 文件定位

6. 关闭文件

二进制文件读取

错误处理

完整示例

常用成员函数

文件打开模式

可以组合使用,例如:

Note

  1. 始终检查文件是否成功打开

  2. 读取完成后关闭文件

  3. 处理可能的读取错误

  4. 对于二进制文件,使用std::ios::binary模式

  5. 使用seekg()tellg()进行文件定位时要小心

  6. 大文件读取考虑使用缓冲区提高效率

文件输出流

文件输出流(File Output Stream)是C++标准库提供的用于向文件写入数据的机制,主要通过<fstream>头文件中的std::ofstream类实现。

基本用法

1. 包含必要的头文件

2. 创建和打开文件

3. 检查文件是否成功打开

4. 写入文件内容

使用插入运算符(<<)

逐字符写入

写入原始数据

5. 文件打开模式

6. 文件定位

7. 关闭文件

二进制文件写入

错误处理

格式化输出

完整示例

常用成员函数

文件打开模式

可以组合使用,例如:

Note

  1. 始终检查文件是否成功打开

  2. 写入完成后关闭文件

  3. 处理可能的写入错误

  4. 对于二进制文件,使用std::ios::binary模式

  5. 使用flush()endl确保数据及时写入磁盘

  6. 默认情况下,打开已存在的文件会清空其内容,如需追加请使用std::ios::app模式

  7. 写入大量数据时,考虑使用缓冲区提高效率

  8. 在多线程环境中,确保适当的同步机制

文件输入输出流(fstream)

如果需要同时读写一个文件,可以使用std::fstream类:

字符串输入输出流

字符串输入流(istringstream)

字符串输入流(istringstream)是C++标准库中的一个类,它允许像处理输入流一样处理字符串。它属于<sstream>头文件中定义的一组类之一。

基本用法

主要用途

1.字符串解析:将字符串分割成多个部分或转换为不同的数据类型

2.格式转换:将字符串转换为数值类型

3.按行处理:结合getline()函数处理多行文本

4.CSV文件解析:处理逗号分隔的数据

常用方法

Note

  1. 类型转换失败时会设置流的失败状态

  2. 可以使用clear()方法重置流的状态

  3. 使用前需要包含<sstream>头文件

字符串输出流(ostringstream)

字符串输出流(ostringstream)是C++标准库中的一个类,它允许将数据写入到一个字符串缓冲区中,就像写入到标准输出流一样。它属于<sstream>头文件中定义的一组类之一。

基本用法

主要用途

1.字符串构建:将不同类型的数据组合成一个字符串

2.格式化输出:使用格式化标志控制输出格式

3.数值转字符串:将数值类型转换为字符串

4.构建复杂字符串:例如构建XML、JSON或其他格式化文本

常用方法

Note

  1. 使用前需要包含<sstream>头文件

  2. 如果需要格式化输出,还需要包含<iomanip>头文件

  3. 可以使用str("") 或创建新的ostringstream对象来清空内容

  4. 对于大量的字符串操作,ostringstream通常比多次使用+运算符拼接字符串更高效