对拍是什么呢?
对拍就是你给两个程序,和一个随机数据生成器,然后系统去用这个随机数据生成器的输出
作为你这两个程序的输入,
然后比较你这两个程序的输出,可以找到一组使这两个程序输出不一样的数据(如果存在的话)
怎么对拍呢?
首先,新建一个文件夹,
然后,在里面放入std.cpp 和 my.cpp
生成std.exe 和 my.exe
然后再写一个随机数据生成器 例:数据生成.cpp ===>数据生成.exe
然后把这三个exe放入到同一文件夹下。
运行对拍程序
@echo off
:loop
数据生成.exe > in.txt
my.exe < in.txt > myout.txt
std.exe < in.txt > stdout.txt
fc myout.txt stdout.txt
if not errorlevel 1 goto loop
pause
goto loop
解释:
首先@echo off
是关掉输入显示,不然你的所有命令都会显示出来的,防止刷屏。 :loop
是定位标记点,和c语言里的goto
很像。
中间是主体程序。 if not errorlevel 1 goto loop
,errorlevel
是上一个命令的返回值,fc
在文件不同时返回1,相同时返回0,这一行的意思就是,
如果fc返回的不是1,就跳到:loop
,使劲循环。 pause
,暂停,一旦fc
返回1,就会执行到这一行,停住程序,给你时间看数据。 goto loop
,看完数据,按下任意键结束暂停,继续循环
即如果出现不同会显示错误。否则不停止。