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 就是酱紫啦!

分类: 文章

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注