【写在前面】
对拍是最强大的查错神器,没有之一!下面我们来看看在Linux中如何进行对拍。此次对拍以这个题目为背景:
给出N个同学的成绩,询问及格的同学有多少个。
正确代码:if (x>=60) ans++;
错误代码:if (x>60) ans++;
【正文】
1、在桌面新建文件夹,命名为“DuiPai”。
2、打开此文件夹,建立四个文件,如下图所示:
3、在data.cpp中输入以下代码:
//数据生成器
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("data.in","w",stdout);
srand( (unsigned int) time( NULL ));
int n=rand()%20;
printf("%d\n",n);
for (int i=1;i<=n;i++) printf("%d ",rand()%20+50);
fclose(stdout);
}
4、在std.cpp中输入以下代码:
//正确代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x;
freopen("data.in","r",stdin);
freopen("std.out","w",stdout);
scanf("%d",&n);
int ans=0;
for (int i=1;i<=n;i++){
scanf("%d",&x);
if (x>=60) ans++;
}
printf("%d",ans);
}
5、在test.cpp中输入以下代码:
//错误代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x;
freopen("data.in","r",stdin);
freopen("test.out","w",stdout);
scanf("%d",&n);
int ans=0;
for (int i=1;i<=n;i++){
scanf("%d",&x);
if (x>60) ans++;
}
printf("%d",ans);
}
6、在DuiPai.cpp中输入以下代码:
//重点!数据比较器
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
for (i=1;;i++){
printf("The result of No. %d Case is: ",i);
system("./data");
system("./std");
system("./test");
if (system("diff std.out test.out")){
printf("Wrong Answer\n");
return 0;
}
else printf("Accepted\n");
}
return 0;
}
7、编译4个cpp文件,如下图所示:
8、运行DuiPai.cpp,可以得到形如下图所示的结果(数据随机生成,故结果可能不一样):
好了,对拍成功。
最后的效果图:
如果发现程序有错误并修改了,务必要重新编译,因为对拍执行的是exe文件,不负责编译代码。
这是本蒟蒻在Linux系统完成的第一篇文章,请资瓷窝^_^