CSP-J/S中 强制要求 使用文件输入输出,且必须通过 freopen(或等效方法)重定向标准输入输出流。以下是详细指南和代码模板:


文件I/O规范

  1. 输入文件:必须从 [题目名].in 读取(例如 promote.in
  2. 输出文件:必须写入到 [题目名].out(例如 promote.out
  3. 绝对禁止 在代码中硬编码路径(如 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;
}

注意事项

  1. 评测系统行为
    官方评测时会自动替换文件路径,本地测试时需要确保 .in 文件与代码在同一目录。

  2. 同步加速(推荐添加):

    ios::sync_with_stdio(false);
    cin.tie(nullptr);  // 提升输入输出效率(尤其大数据量时)
  3. 替代方案
    可使用 ifstream/ofstream,但 freopen 更简洁且与 cin/cout 兼容:

    ifstream fin("promote.in");
    ofstream fout("promote.out");
    int x; 
    fin >> x;          // 从文件读
    fout << x << endl; // 写入文件
  4. 常见错误

    • 文件名拼写错误(区分大小写,必须全小写)
    • 忘记添加 .in/.out 后缀
    • 本地测试时未放置输入文件

为什么必须用文件I/O?

评测机在运行时会:

  1. 自动编译你的代码
  2. 将测试数据写入 [题目名].in
  3. [题目名].out 读取结果
  4. 比对输出与正确答案

若未使用文件I/O,程序会尝试从控制台读取输入,导致超时(Waiting for input)或错误。


验证方法

本地测试时,可以手动创建 promote.in 文件:

3 5

运行代码后检查是否生成 promote.out 并包含结果:

8

建议始终在代码提交前进行本地文件I/O验证!