众所周知,本地调试代码每次粘贴样例非常麻烦,因此我们可以使用
f
r
e
o
p
e
n
freopen
freopen大法重定向输入输出,大多数时候都会用上重定向输入:
freopen("in.txt", "r", stdin);
然后你就能够把数据放到
i
n
.
t
x
t
in.txt
in.txt里面,输入会每次去这里面读。
这个操作有两个好处:
1. 不用自己频繁输入相同的样例,尤其是CV上交后,粘贴板发生变化的情况。
2. 输入和输出达到分离,更容易发现问题所在
当然这都是为了节省时间。
但是我们会发现一个bug,就是每次上交到OJ上的时候,都要把
f
r
e
o
p
e
n
freopen
freopen删掉!OJ上可不是从
i
n
.
t
x
t
in.txt
in.txt里读的可能是从其他文件读的,如果忘记这个操作就会直接WA,毕竟没有输入了嘛,一来一回也挺麻烦,这个时候我们就引入了一个神奇的预编译指令:
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // !ONLINE_JUDGE
在 f r e o p e n freopen freopen外面套一个infdef预编译指令,如果ONLINE_JUDGE被没被定义的话才会编译中间的代码,然后在线OJ都会定义这个变量。结果就是,在本地我们可以快乐地freopen,提交上去不会编译这条指令。