目录
一、标准输入输出
2.1下面是它们的基本用法
解释
二、格式化输入输出
2.2下面是一个示例
解释
三、文件读写
3.3下面是一个文件读写的示例
解释
四、异常处理和错误检测
4.1下面是一个示例
解释
五、一个实例代码
5.1如何读取 CSV 文件,并计算每一列的平均值
上一篇文章链接:
C++ 是一门功能强大的编程语言,它提供了很多工具来实现各种编程任务。在本文中,我们将介绍 C++ 中的三个重要概念:友元、嵌套类和异常。
C++学习笔记——友元、嵌套类、异常-CSDN博客文章浏览阅读20次。友元、嵌套类和异常是 C++ 中三个重要的概念,它们可以提高程序的灵活性、封装性和健壮性。但是,需要注意的是过度使用它们会破坏程序的封装性、增加代码的复杂度和影响程序的性能。因此,在编写程序时,应根据实际情况选择适当的编程技术来提高程序的可读性、可维护性和可靠性。https://blog.csdn.net/m0_62338174/article/details/135573148?spm=1001.2014.3001.5502
C++ 是一种功能强大的编程语言,它提供了丰富的输入、输出和文件操作功能,使得开发者能够方便地与用户交互、读写数据以及进行文件处理。本篇博客将详细介绍 C++ 的输入输出流(iostream)库,并给出代码示例和详细解释,帮助读者深入理解 C++ 中的输入输出和文件操作。
一、标准输入输出
标准输入流(cin)和标准输出流(cout)是 C++ 中常用的标准输入输出方式。
2.1下面是它们的基本用法
#include <iostream>int main() {int age;std::cout << "请输入您的年龄:";std::cin >> age;std::cout << "您的年龄是:" << age << std::endl;return 0;
}
解释
std::cin
用于从标准输入流读取数据。
std::cout
用于向标准输出流输出数据。
>>
运算符用于从输入流中提取数据。
<<
运算符用于将数据插入到输出流中。
std::endl
用于在输出流中插入换行符。
二、格式化输入输出
C++ 提供了格式化标志和操纵算子,可以控制输入输出的格式。
2.2下面是一个示例
#include <iostream>
#include <iomanip>int main() {double pi = 3.14159;std::cout << "圆周率:" << std::setprecision(4) << pi << std::endl;int num = 10;std::cout << "数字:" << std::setw(5) << std::setfill('0') << num << std::endl;return 0;
}
解释
std::setprecision
设置输出浮点数的精度。
std::setw
设置输出字段的宽度。
std::setfill
设置填充字符。
三、文件读写
操作 C++ 允许我们使用文件流来读写文件。
3.3下面是一个文件读写的示例
#include <iostream>
#include <fstream>int main() {// 写入文件std::ofstream outfile("data.txt");if (outfile.is_open()) {outfile << "Hello, World!";outfile.close();} else {std::cout << "无法打开文件" << std::endl;}// 读取文件std::ifstream infile("data.txt");std::string line;if (infile.is_open()) {while (getline(infile, line)) {std::cout << line << std::endl;}infile.close();} else {std::cout << "无法打开文件" << std::endl;}return 0;
}
解释
std::ofstream
用于写入文件。
std::ifstream
用于读取文件。
is_open()
函数用于检查文件是否成功打开。
getline
函数用于逐行读取文件内容。
四、异常处理和错误检测
在文件操作过程中,我们需要进行异常处理和错误检测,以保证程序的健壮性。
4.1下面是一个示例
#include <iostream>
#include <fstream>int main() {std::ofstream outfile("data.txt");if (!outfile) {std::cerr << "无法打开文件" << std::endl;return 1;}try {// 写入文件outfile << "Hello, World!";outfile.close();// 读取文件std::ifstream infile("data.txt");if (!infile) {throw std::runtime_error("无法打开文件");}std::string line;while (getline(infile, line)) {std::cout << line << std::endl;}infile.close();} catch (const std::exception& e) {std::cerr << "发生错误:" << e.what() << std::endl;return 1;}return 0;
}
解释
使用
std::cerr
输出错误信息。使用
try-catch
块捕获并处理可能的异常。使用
throw
抛出自定义异常。
五、一个实例代码
5.1如何读取 CSV 文件,并计算每一列的平均值
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>int main() {std::ifstream infile("data.csv");if (!infile) {std::cerr << "无法打开文件" << std::endl;return 1;}std::string line;std::vector<std::vector<double>> data;int num_cols = 0;while (getline(infile, line)) {std::stringstream ss(line);std::vector<double> row;double val;while (ss >> val) {row.push_back(val);if (ss.peek() == ',') {ss.ignore();}}if (num_cols == 0) {num_cols = row.size();} else if (row.size() != num_cols) {std::cerr << "数据格式不正确" << std::endl;return 1;}data.push_back(row);}infile.close();for (int j = 0; j < num_cols; ++j) {double sum = 0.0;for (int i = 0; i < data.size(); ++i) {sum += data[i][j];}double avg = sum / data.size();std::cout << "第 " << j + 1 << " 列的平均值为:" << avg << std::endl;}return 0;
}
解释:
std::ifstream
用于读取文件。getline
函数用于逐行读取文件内容。- 使用
std::stringstream
将每行内容转换为一个 double 类型的 vector。- 检查数据格式是否正确,保证每一行的列数相同。
- 使用二维 vector 存储数据。
- 计算每一列的平均值。
除此之外,还有一些最佳实践和注意事项:
- 输入输出操作需要谨慎处理,避免出现死循环或者读写错误等问题。
- 在进行文件读写操作时,需要确保文件存在,并且需要考虑文件权限等问题。
- 在读取 CSV 文件等格式化数据时,需要特别注意数据格式的一致性,避免出现数据错误或程序崩溃等情况。
- 在进行异常处理时,需要尽可能详细地输出错误信息,以便快速定位问题。
- 在进行文件读写操作时,需要及时关闭文件流,释放资源。
- 在进行大量数据处理时,需要考虑内存占用等问题,避免出现程序崩溃等情况。
- 在进行输入输出和文件操作时,需要充分利用 C++ STL 提供的丰富功能和算法库,以提高开发效率和程序质量。