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

发表评论

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

你是机器人吗? =。= *