本讲定位:四级最后两个知识块,也是性价比最高的一讲。内容少、几乎全是记忆题,但每场必考 1~2 道(2026 年 3 月真题判断题第 8 题就是文件写入)。花两节课就能把这 2~4 分锁死。
对应官方大纲:四级知识块 7「文件操作」——文件重定向,读操作、写操作、读写操作;知识块 8「异常处理」——异常处理机制和常用方法。大纲另要求”了解文本文件的分类”。
前置知识:
cin/cout的基本用法。代码说明:本讲代码均已用 g++ 11.5(
-std=c++11)编译运行验证,文件读写实测生成并读回。
2026 年 3 月四级判断题第 8 题(原题):
下面程序能够把
Hello写入data.txt文件中。ofstream fout("data.txt"); cout << "Hello"; fout.close();
答案:❌ 错误。
为什么? 文件流 fout 确实打开了,但接下来写的是 cout(屏幕),不是 fout(文件)。Hello 被输出到了控制台,data.txt 是个空文件。
正确写法只差一个字母:
ofstream fout("data.txt");
fout << "Hello"; // ← 这里必须是 fout
fout.close();
📌 这就是本讲的典型出题方式:不考复杂逻辑,只考你有没有仔细看清楚每个标识符。让学生养成”读文件操作题时,用手指点着每个流对象的名字念一遍”的习惯。
freopen)重定向:让原本从键盘读、往屏幕写的 cin / cout,改成从文件读、往文件写。
#include<cstdio>// freopen 在这个头文件里
int main() {
freopen("input.txt", "r", stdin); // 以后 cin 从 input.txt 读
freopen("output.txt", "w", stdout); // 以后 cout 写到 output.txt
int a, b;
cin >> a >> b; // 从 input.txt 读
cout << a + b << endl; // 写到 output.txt
fclose(stdin);
fclose(stdout);
return 0;
}
三个参数要背:
| 参数 | 含义 | 常用值 |
|---|---|---|
| 第 1 个 | 文件名 | "input.txt" |
| 第 2 个 | 打开模式 | "r" 读、"w" 写、"a" 追加 |
| 第 3 个 | 重定向哪个流 | stdin(输入)、stdout(输出) |
⚠️ 极高频陷阱:
"r"配stdin、"w"配stdout。配反了(如freopen("in.txt","w",stdin))是错的,选择题常在这里挖坑。记法:读入配 r,输出配 w。