目录
上一篇文章链接:
C++ 是一门功能强大的编程语言,它提供了很多工具来实现各种编程任务。在本文中,我们将介绍 C++ 中的三个重要概念:友元、嵌套类和异常。
?
??? C++ 是一种功能强大的编程语言,它提供了丰富的输入、输出和文件操作功能,使得开发者能够方便地与用户交互、读写数据以及进行文件处理。本篇博客将详细介绍 C++ 的输入输出流(iostream)库,并给出代码示例和详细解释,帮助读者深入理解 C++ 中的输入输出和文件操作。
标准输入流(cin)和标准输出流(cout)是 C++ 中常用的标准输入输出方式。
#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++ 提供了格式化标志和操纵算子,可以控制输入输出的格式。
#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++ 允许我们使用文件流来读写文件。
#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
函数用于逐行读取文件内容。
在文件操作过程中,我们需要进行异常处理和错误检测,以保证程序的健壮性。
#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
抛出自定义异常。
#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 存储数据。
- 计算每一列的平均值。
除此之外,还有一些最佳实践和注意事项: