CSP-J/S中 强制要求 使用文件输入输出,且必须通过 freopen
(或等效方法)重定向标准输入输出流。以下是详细指南和代码模板:
文件I/O规范
- 输入文件:必须从
[题目名].in
读取(例如promote.in
) - 输出文件:必须写入到
[题目名].out
(例如promote.out
) - 绝对禁止 在代码中硬编码路径(如
C:\...
)
C++标准写法
#include <bits/stdc++.h>
using namespace std;
int main() {
// 文件重定向(必须添加)
freopen("promote.in", "r", stdin);
freopen("promote.out", "w", stdout);
// 你的代码逻辑
int a, b;
cin >> a >> b;
cout << a + b << endl;
// 关闭文件流(非必需,但严谨写法建议添加)
fclose(stdin);
fclose(stdout);
return 0;
}
注意事项
评测系统行为:
官方评测时会自动替换文件路径,本地测试时需要确保.in
文件与代码在同一目录。同步加速(推荐添加):
ios::sync_with_stdio(false); cin.tie(nullptr); // 提升输入输出效率(尤其大数据量时)
替代方案:
可使用ifstream/ofstream
,但freopen
更简洁且与cin/cout
兼容:ifstream fin("promote.in"); ofstream fout("promote.out"); int x; fin >> x; // 从文件读 fout << x << endl; // 写入文件
常见错误:
- 文件名拼写错误(区分大小写,必须全小写)
- 忘记添加
.in/.out
后缀 - 本地测试时未放置输入文件
为什么必须用文件I/O?
评测机在运行时会:
- 自动编译你的代码
- 将测试数据写入
[题目名].in
- 从
[题目名].out
读取结果 - 比对输出与正确答案
若未使用文件I/O,程序会尝试从控制台读取输入,导致超时(Waiting for input)或错误。
验证方法
本地测试时,可以手动创建 promote.in
文件:
3 5
运行代码后检查是否生成 promote.out
并包含结果:
8
建议始终在代码提交前进行本地文件I/O验证!