汪柴宁
已结束
XCPC
开始于: 2025-12-17 20:00
8
小时
主持人:
3
开始之前必须把这个学会
文件读写
https://www.yuque.com/_yezi/csp/ex44dgdiflultgaf?singleDoc# 语雀链接
一、核心要求
CSP-J复赛程序禁止使用控制台输入输出,必须从指定.in文件读取输入数据,将结果写入指定.out文件。
二、推荐方案(freopen重定向,首选)
1. 核心函数:freopen()
作用:重定向标准输入(stdin)/输出(stdout),让cin/cout/scanf/printf直接读写文件。
// 输入重定向:从xxx.in读数据(只读模式)
freopen("文件名.in", "r", stdin);
// 输出重定向:向xxx.out写数据(只写模式,不存在则创建,存在则清空)
freopen("文件名.out", "w", stdout);
2. 完整模板(直接套用)
#include <iostream>
using namespace std;
int main() {
// 1. 重定向文件(替换为题目指定的文件名!)
freopen("problem.in", "r", stdin);
freopen("problem.out", "w", stdout);
// 2. 核心逻辑(和控制台写法完全一致)
int a, b;
cin >> a >> b; // 从.in文件读
cout << a + b << endl; // 向.out文件写
// 3. 可选:关闭文件(程序结束自动关闭,比赛可省略)
fclose(stdin);
fclose(stdout);
return 0;
}
3. 关键说明
- 重定向后,
cin/cout/scanf/printf用法无需任何修改; - 文件名必须和题目要求完全一致(如
calc.in/calc.out),多空格/错字母直接零分。
三、备用方案(fstream流,了解即可)
#include <iostream>
#include <fstream> // 必须包含头文件
using namespace std;
int main() {
ifstream fin("problem.in"); // 输入文件流
ofstream fout("problem.out"); // 输出文件流
// 核心逻辑:用fin代替cin,fout代替cout
int a, b;
fin >> a >> b;
fout << a + b << endl;
fin.close(); // 关闭文件流
fout.close();
return 0;
}
四、必记注意事项
- 调试/比赛切换:
- 本地调试:注释
freopen行,用控制台输入输出测试; - 提交前:务必取消注释,确保文件重定向生效。
- 本地调试:注释
- 兼容性:
freopen方案兼容C/C++写法,无需额外头文件,比fstream更简洁。 - 无需手动关闭:程序结束后系统会自动关闭文件流,比赛中省略
fclose不影响结果。
五、核心总结
- 优先用
freopen()重定向stdin/stdout,代码简洁不易错; - 文件名是“生死线”,必须严格匹配题目要求;
- 重定向后核心逻辑写法和控制台完全一致,无需改动。
- 状态
- 已结束
- 规则
- XCPC
- 题目
- 11
- 开始于
- 2025-12-17 20:00
- 结束于
- 2025-12-18 4:00
- 持续时间
- 8 小时
- 主持人
- 参赛人数
- 3