宇宙免责声明:本文部分由D老师和豆老师进行编写,D老师太过幽默,读起来可能有些不“逝”,请见谅
一句话定位:
freopen
是竞赛中很重要的操作,如果你不会的话,你将面临正常考试零分的结果。
核心功能三连:
- 输入重定向:
freopen("data.in", "r", stdin);
👉cin
从此只看得到data.in
里的数据 - 输出重定向:
freopen("result.out", "w", stdout);
👉cout
把结果塞进result.out
,屏幕一脸懵。 - 模式须知:
"r"
:文件必须存在(不然freopen
哭给你看😢)"w"
:文件存在?清空!不存在?新建!(无情铁手✋)
竞赛必知段子:
#include <cstdio>
int main() {
#ifdef DEBUG
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#endif
int x;
std::cin >> x;
std::cout << x * 2; // 结果输出在test.out
return 0;
}
运行效果:
- 本地跑:程序变“地下工作者”,屏幕风平浪静,结果藏身
test.out
。 - 提交OJ:注释掉
#ifdef
,程序秒变“乖宝宝”,cin/cout
老实等裁判喂数据。
比赛时的暴零瞬间:
- 路径坑:
data.in
必须和程序 同目录(换句话说在同一个文件夹里)!
👉 否则程序:“文件呢?我吃空气吗?” 🤷♂️ - 提交忘注释:
忘删freopen
→ OJ 等你键盘输入 → 超时(TLE)暴毙!
👉 经典遗言:“我本地明明AC了啊!” - "w"模式清空警告:
手滑运行两次?第一次的result.out
已灰飞烟灭!
👉 建议:调试时用 文件对比工具(救你狗命🆘)
终极口诀(10秒背会): <-D老师写的
文件重定向,
freopen
强;
stdin
偷输入,stdout
藏输出。
本地开#ifdef
,提交必注释!
路径若写错,程序两行泪💧
幽默收尾: <-D老师写的
它像程序界的 “双面间谍”:
调试时——暗中操作文件深藏功与名;
提交时——秒变清白之身迎接OJ审判!
用对稳如老狗,用错当场翻车 🚗💨