上期回顾: 【C++】lambda表达式
个人主页:C_GUIQU
归属专栏:C++
目录
正文
1. 简介
在C++编程中,IO流是一个非常重要的概念。它提供了一种统一的方式来处理输入和输出操作,无论是从控制台、文件还是其他输入输出设备。IO流使得数据的传输更加方便和灵活,是C++程序与外界交互的关键机制。
2. IO流的基本类型
2.1 输入流(istream)
输入流主要用于从外部源读取数据到程序中。在C++中,std::cin
是标准输入流的一个典型例子,它允许用户从控制台输入数据。例如:
#include <iostream>
int main() {
int num;
std::cout << "请输入一个整数: ";
std::cin >> num;
std::cout << "你输入的整数是: " << num << std::endl;
return 0;
}
这里std::cin
从用户那里获取输入并将其存储到变量num
中。
2.2 输出流(ostream)
输出流用于将程序中的数据输出到外部目标。std::cout
是标准输出流,常用于向控制台输出信息。除了简单的文本输出,还可以输出各种数据类型的值。例如:
#include <iostream>
int main() {
double pi = 3.1415926;
std::cout << "圆周率的值约为: " << pi << std::endl;
return 0;
}
此外,还有cerr
用于输出错误信息,clog
用于输出日志信息等。
2.3 输入输出流(iostream)
输入输出流结合了输入流和输出流的功能。fstream
库中的fstream
类就是一种典型的输入输出流,它可以用于对文件进行读写操作。例如:
#include <fstream>
#include <iostream>
int main() {
std::fstream file("test.txt", std::ios::in | std::ios::out);
if (file) {
int data = 10;
file << data;
file.seekg(0);
int readData;
file >> readData;
std::cout << "从文件中读取的数据: " << readData << std::endl;
file.close();
}
return 0;
}
3. 格式化输入输出
3.1 输出流的格式化
输出流可以通过使用控制符来实现格式化输出。例如,std::setw()
用于设置输出宽度,std::setprecision()
用于设置浮点数的精度。
#include <iostream>
#include <iomanip>
int main() {
double number = 123.456789;
std::cout << std::setw(10) << std::setprecision(3) << number << std::endl;
return 0;
}
这使得输出更加美观和符合特定的格式要求。
3.2 输入流的格式化
输入流也有一些格式化相关的操作,比如跳过空白字符等。不过,相对输出流的格式化,输入流的格式化使用场景稍少一些。
4. 文件流操作
4.1 文件的打开与关闭
在使用文件流时,首先要打开文件。可以使用open()
函数或者在构造函数中指定文件名和打开模式。打开模式包括读模式(ios::in
)、写模式(ios::out
)、追加模式(ios::app
)等。文件使用完毕后,要及时关闭,以释放资源。例如:
#include <fstream>
int main() {
std::ofstream outFile("output.txt", std::ios::out);
if (outFile) {
outFile << "这是写入文件的内容" << std::endl;
outFile.close();
}
return 0;
}
4.2 文件的读写操作
文件的读写操作根据是文本文件还是二进制文件有所不同。对于文本文件,可以像操作标准输入输出流一样使用<<
和>>
运算符。对于二进制文件,则需要使用read()
和write()
函数。例如:
#include <fstream>
int main() {
std::ofstream binaryFile("binary.bin", std::ios::out | std::ios::binary);
if (binaryFile) {
int data = 255;
binaryFile.write(reinterpret_cast<char*>(&data), sizeof(int));
binaryFile.close();
}
return 0;
}
5. 字符串流(sstream)
5.1 从字符串中读取数据
字符串流允许我们将一个字符串当作输入流来处理。例如,可以将一个包含数字的字符串解析为相应的数值类型。
#include <sstream>
#include <iostream>
int main() {
std::string str = "123 456";
std::stringstream ss(str);
int num1, num2;
ss >> num1 >> num2;
std::cout << "从字符串中解析出的数字: " << num1 << " 和 " << num2 << std::endl;
return 0;
}
5.2 将数据写入字符串
也可以将数据写入字符串流,从而生成一个包含特定内容的字符串。
#include <sstream>
#include <iostream>
int main() {
std::stringstream ss;
int num = 789;
ss << "这是一个数字: " << num;
std::string result = ss.str();
std::cout << result << std::endl;
return 0;
}
6. 总结
C++的IO流提供了丰富的功能,涵盖了输入流、输出流、输入输出流、文件流和字符串流等多种类型。通过这些不同类型的流,可以方便地实现与用户、文件以及字符串之间的数据交互和处理。掌握IO流的各种操作,包括格式化输入输出、文件的打开关闭和读写以及字符串流的使用,对于编写高质量的C++程序至关重要,能够满足不同场景下的输入输出需求,增强程序的实用性和灵活性。
结语
感谢您的阅读!期待您的一键三连!欢迎指正!