C++流(Stream)是C++标准库中的一个重要组成部分,它提供了一种面向对象的方式来处理输入和输出操作。流可以将数据从一个地方传输到另一个地方,这个过程就像水流一样,因此被称为“流”。在C++中,流的实现主要依赖于标准模板库(STL)中的<iostream>、<fstream>、<sstream>等头文件。
内存与标准输入输出设备之间信息的传递
????std::cin:标准输入流,用于从键盘读取数据。
????std::cout:标准输出流,用于向屏幕输出数据。
????std::cerr:标准错误流,也用于向屏幕输出数据,但通常用于显示程序运行时的错误信息,它的缓冲区会立即刷新,确保错误消息能够立即被看到。
????std::clog:日志流,与cerr类似,但其行为与cout相同,即只有当缓冲区满或手动刷新时才会输出。
内存与外文件之间信息的传递
文件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;
}
内存变量与表示字符串流的字符数组之间信息的传递
字符串I/O流位于<sstream>头文件中,它们允许程序像操作文件一样操作内存中的字符串。
????std::istringstream:输入字符串流,可以从字符串中提取数据。
????std::ostringstream:输出字符串流,可以将数据插入到字符串中。
? ? std::stringstream:输入/输出字符串流,既可以提取也可以插入数据。
流支持多种操作来读取和写入不同类型的变量,如整数、浮点数、字符串等。
以下是一些常见的操作:
????>>:提取运算符,用于从流中读取数据。
????<<:插入运算符,用于向流中写入数据。
????.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将结果输出到屏幕上。
?1、当从流中提取数据时,如果遇到非法输入或者格式不匹配的情况,流会进入一种称为“失败”(failed)的状态,后续的读取操作可能会受到影响。为了处理这种情况,可以使用clear()函数清除流的状态标志,并使用ignore()函数跳过导致错误的数据。
?2、在读取或写入之前,最好检查流的状态,以确保流已经正确地打开了。这可以通过调用.is_open()方法来完成。
?3、对于文件流,记得在使用完毕后关闭文件,否则可能会导致数据丢失或资源泄漏。
?