You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arch Linux下本地C文件读写适配竞赛编程需求

解决Arch Linux下C语言竞赛代码本地文件IO乱码问题

问题根源

你遇到的乱码核心原因是文件名冲突:编译命令gcc addition.c -Wall -o output生成的可执行文件名为output,而代码中freopen("output", "w", stdout)又要往同名文件写入输出内容,运行时会直接覆盖可执行文件,导致文件损坏,出现乱码。此外还可能存在LOCAL宏未正确启用、输入文件格式错误的问题。

解决方案

1. 避免文件名冲突

修改编译命令的输出可执行文件名,或者调整代码中的输出文件名,确保两者不重复:

  • 调整编译命令,生成不同名的可执行文件:
    gcc addition.c -Wall -DLOCAL -o addition
    
  • 或者修改代码中的输出文件名,比如改成"result.out":
    #ifdef LOCAL
        freopen("input", "r", stdin);
        freopen("result.out", "w", stdout);
    #endif
    

2. 确保LOCAL宏正确启用

编译时必须添加-DLOCAL参数,否则#ifdef LOCAL包裹的代码会被跳过,程序依然使用标准输入输出,不会读取本地文件。上面的编译命令已经包含了该参数。

3. 校验输入文件格式

确保input文件内容符合程序要求:文件中需包含两个用空格/换行分隔的整数,例如:

3 5

如果输入格式错误,scanf无法正确读取数据,会导致输出随机值,看起来像乱码。

验证方法

  1. 按上述修改后,编译生成可执行文件;
  2. 运行./addition(对应编译命令生成的可执行文件名);
  3. 查看输出文件(如result.out),应该得到正确的两数之和。

这样修改后,代码在本地可以正常读取文件输入、写入输出,同时因为LOCAL宏仅在本地编译时定义,提交到Codeforces、CodeChef等平台时,平台不会定义该宏,代码会自动使用标准IO,完全不影响在线评测。

内容的提问来源于stack exchange,提问作者garakchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:32:46