C++流 小结

2023-12-13 14:46:37

C++流(Stream)是C++标准库中的一个重要组成部分,它提供了一种面向对象的方式来处理输入和输出操作。流可以将数据从一个地方传输到另一个地方,这个过程就像水流一样,因此被称为“流”。在C++中,流的实现主要依赖于标准模板库(STL)中的<iostream><fstream><sstream>等头文件。

1、标准I/O流?

内存与标准输入输出设备之间信息的传递

????std::cin:标准输入流,用于从键盘读取数据。

????std::cout:标准输出流,用于向屏幕输出数据。

????std::cerr:标准错误流,也用于向屏幕输出数据,但通常用于显示程序运行时的错误信息,它的缓冲区会立即刷新,确保错误消息能够立即被看到。

????std::clog:日志流,与cerr类似,但其行为与cout相同,即只有当缓冲区满或手动刷新时才会输出。

2、文件I/O流??

内存与外文件之间信息的传递

文件I/O流类位于<fstream>头文件中,它们允许程序从文件读取数据和向文件写入数据。

????std::ifstream:输入文件流,用于打开并读取文件。

????std::ofstream:输出文件流,用于创建并写入文件。

????std::fstream:输入/输出文件流,既可以读取也可以写入文件。

使用这些流时,需要先打开文件,然后进行读写操作,最后关闭文件。

例如:

#include <fstream>

int main()

{

????std::ifstream input("input.txt");

if (input)

?{

????????// 读取文件内容

????}

????input.close();

? ? std::ofstream output("output.txt");

if (output)

{

????????// 写入文件内容

????}

????output.close();

????return 0;

}

3、字符串I/O流?

内存变量与表示字符串流的字符数组之间信息的传递

字符串I/O流位于<sstream>头文件中,它们允许程序像操作文件一样操作内存中的字符串。

????std::istringstream:输入字符串流,可以从字符串中提取数据。

????std::ostringstream:输出字符串流,可以将数据插入到字符串中。

? ? std::stringstream:输入/输出字符串流,既可以提取也可以插入数据。

4、流的操作

流支持多种操作来读取和写入不同类型的变量,如整数、浮点数、字符串等。

以下是一些常见的操作:

????>>:提取运算符,用于从流中读取数据。

????<<:插入运算符,用于向流中写入数据。

????.get() 和 .getline():用于读取单个字符或一行文本。

????.put():用于写入单个字符。

????.read() 和 .write():用于读写一定数量的字节。

????.eof():检查是否到达了流的末尾。

????.good()、.bad()、.fail() 和 .eof():检查流的状态。

以下是一个简单的例子,展示了如何使用cin和cout进行基本的交互:

#include <iostream>

int main()

{

????int a, b;

????std::cout << "Enter two numbers: ";

????std::cin >> a >> b;

????std::cout << "The sum is: " << a + b << std::endl;

????return 0;

}

在这个例子中,首先定义了两个整数a和b,然后通过std::cin从用户那里读取两个数字,并将它们存储在a和b中。接着,计算这两个数字的和,并使用std::cout将结果输出到屏幕上。

5、总结

?1、当从流中提取数据时,如果遇到非法输入或者格式不匹配的情况,流会进入一种称为“失败”(failed)的状态,后续的读取操作可能会受到影响。为了处理这种情况,可以使用clear()函数清除流的状态标志,并使用ignore()函数跳过导致错误的数据。

?2、在读取或写入之前,最好检查流的状态,以确保流已经正确地打开了。这可以通过调用.is_open()方法来完成。

?3、对于文件流,记得在使用完毕后关闭文件,否则可能会导致数据丢失或资源泄漏。

?

文章来源:https://blog.csdn.net/2301_79503228/article/details/134970582
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。