VS Code编译C++时如何自动从input.txt读取输入到终端(Ubuntu+Code Runner)
C++ 程序自动读取本地输入文件的实现方案(Ubuntu VS Code + Code Runner 环境)
方案1:修改Code Runner配置(无需修改代码,全局生效)
- 打开VS Code设置,搜索
code-runner.executorMap,选择在settings.json中编辑 - 找到配置项中
cpp对应的执行命令,默认值为:"cpp": "g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - 将命令修改为带输入重定向的版本:
// 仅自动读取input.txt作为输入,结果输出到终端 "cpp": "g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt < $dirinput.txt" // 如果需要同时把输出保存到output.txt,用下面的版本 // "cpp": "g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt < $dirinput.txt > $diroutput.txt" - 配置完成后,在当前代码所在文件夹新建
input.txt,写入测试用例,运行Code Runner就会自动读取文件内容作为输入,不需要手动输入。
方案2:代码内增加条件编译(灵活切换,不影响OJ提交)
不需要修改IDE配置,仅在代码头部加入少量宏定义即可:
#include <iostream> using namespace std; // 仅本地运行时生效,自动重定向输入输出 #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); // 可选:自动把输出存到output.txt // freopen("output.txt", "w", stdout); #endif // 原来的代码不需要做任何修改 int main() { int M,N; cin>>M>>N; int i,a[M],b[N]; for(i=0;i<M;i++) { cin>>a[i]; } for(i=0;i<N;i++) { cin>>b[i]; } Solution ob; cout<<ob.countPairs(a, b, M, N)<<endl; return 0; }
- 本地编译运行时默认没有定义
ONLINE_JUDGE宏,会自动将标准输入重定向到同目录的input.txt,原有cin逻辑完全不需要改动 - 提交到在线判题平台时,平台一般会默认定义
ONLINE_JUDGE宏,这部分重定向代码不会生效,不影响正常提交使用。
注意事项
- 两种方案都默认
input.txt和当前运行的C++代码在同一个文件夹下,如果存放在其他路径,需要替换成文件的绝对路径 - 如果使用方案1,需要临时手动输入测试用例时,直接在终端手动执行编译后的二进制文件,不加
< input.txt参数即可
内容的提问来源于stack exchange,提问作者Senthil Vikram Vodapalli
相关产品推荐
相关产品推荐

