文件读写是 C++ 操作文件 I/O 的能力,属于 数据持久化 类考点。GESP 考试中常考 ifstream(读文件)和 ofstream(写文件),偶尔涉及 fstream 同时读写。
核心机制很简单:打开文件 → 操作 → 关闭文件。但有几个坑:文件路径用字符串表示(注意斜杠方向)、打开后必须检查是否成功、用完必须关闭(或等作用域结束自动关闭)。
\\ 或 / 都行,但 \ 本身是转义字符,直接写 "C:\test.txt" 会出错!必须写 "C:\\test.txt" 或 "C:/test.txt"。
ifstream in("f.txt"); string a; int b; in >> a >> b;numbers.txt 读取若干整数(每行一个,不知道有多少个),输出这些整数的总和和平均值。while (in >> x) 可以一直读到文件末尾。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream in("numbers.txt");
int x, sum = 0, cnt = 0; // cnt记录读入的整数个数
while (in >> x) { // 读到文件末尾时自动退出
sum += x; // 累加每个整数
cnt++; // 计数
}
if (cnt > 0) {
cout << "总和: " << sum << endl;
cout << "平均值: " << (double)sum / cnt << endl;
} else {
cout << "文件为空" << endl;
}
return 0;
}
// 输入文件 numbers.txt: 10 20 30
// 输出: 总和: 60 平均值: 20
while (in >> x) 是文件读取的惯用写法——当读到文件末尾或格式不匹配时,流状态变为 false,循环自动终止。
>> 遇到空格/换行就停,要读整行用 getline(in, str)。