1. 引言
今天考试遇到一个提交答案题,已经给出了答案检验器(已经编译了的,没有源码),但是手动输命令检验答案文件效率很低,我们最好是让检验器本来输出到屏幕的东西输出到文件,方便我们写程序自动检验。
但是我们没有检验器源码,没法 freopen 怎么办呢 QvQ
其实是 kb 提出了这个问题啦,下面我就来讲一下 linux(ubuntu)下的重定向输入/输出的方法。
2. 输出重定向
现在我们有个已经编译好了的,普通的 helloworld 的程序:
#include <bits/stdc++.h>
using namespace std;
int main()
{
puts("helloworld!");
return 0;
}
假如我们的可执行文件名叫做 hello。
现在我们要不用 freopen 将 helloworld! 这个字符串输出到 out.txt 中。
那么我们在终端执行命令:
./hello >./out.txt
怎么样?是不是很神奇?QvQ
而且就算原本没有 out.txt 这个文件也是没关系的,它会自己帮你生成。
一般这样就能满足在 OI 中的需求了,但加入你真的要多次输出累加起来,比如运行两次 hello,然后 out.txt 里就有两行 helloworld! 的话,你就执行两遍:
./hello >>./out.txt
也就是多了一个>符号
这样会让你后面的输出接到原本文件的末尾。
3. 输入重定向
现在问题又来了,我们有一个普通的 a+b 问题的代码:
#include <bits/stdc++.h>
using namespace std;
int a,b;
int main()
{
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}
假设文件名叫做 aplusb
假如我们要从 in.txt 读入的话就执行命令:
./aplusb <in.txt
很方便吧?= ̄ω ̄=嘻嘻……
再比如我们要从 in.txt 读入,将答案输出到 out.txt:
./aplusb <in.txt >out.txt
QvQ 就是酱紫啦!
0 条评论