引入
在程序设计中,总是会有一些神奇的bug,所以我们不得不去对程序进行调试。
通常我们会在程序某一些地方输出一下指定内容。
一般注释
我们经常在输出内容后恍然大悟,然后稍稍改改,就自信地提交了,结果。。。
#include<bits/stdc++.h>
using namespace std;
#define N 105
int n,k,arr[N];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d",&arr[i]);
sort(arr+1,arr+1+n);
for(int i=1; i<=n; i++)
printf("%d ",arr[i]);
puts("*");
printf("%d",arr[n-k+1]);
}//求N个数中倒数第K大的数
WA。。。
所以,一定要注释!!!
#include<bits/stdc++.h>
using namespace std;
#define N 105
int n,k,arr[N];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d",&arr[i]);
sort(arr+1,arr+1+n);
// for(int i=1; i<=n; i++)
// printf("%d ",arr[i]);
// puts("*");
printf("%d",arr[n-k+1]);
}//AC
这样就能A了。注意看看,我在调试后加了“*”,这样在输入输出很多时可以快速地找到调试结果。
通常我们可能会注释很多行,DEV-C++中有一个快捷方式:
选中指定行,Ctrl+/(问号下面的"/")。
但是,还是会出现一种情况,就是要注释几处地方,这个时候就很容易漏掉某个地方,
所以我要说说第二种方法----debug标记注释。
debug注释法
这个方法呢,是我的老师发明的,确实也不错。
就是把 // 换成了
if(debug==?)
{
调试代码...
}
这样做有什么益处呢?举个例子。
#include<bits/stdc++.h>
using namespace std;
#define debug 1
#define N 105
int n,arr[N],brr[N],mxa,mxb;
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&arr[i]);
mxa=max(mxa,arr[i]);
}
if(debug==2) printf("%d*\n",mxa);
for(int i=1; i<=n; i++)
{
scanf("%d",&brr[i]);
mxb=max(mxb,brr[i]);
}
if(debug==2) printf("%d*\n",mxb);
if(mxa>mxb) printf("A");
else printf("B");
}//哪个数组的最大数最大
这样,在调试完后,只需要把debug改为1即可。
另外,在正规考试中,经常会忘了把freopen的注释去掉,有了这个方法,就可以
#include<bits/stdc++.h>
using namespace std;
#define debug -1
#define N 105
int n,arr[N],brr[N],mxa,mxb;
int main()
{
if(debug==-1)
{
freopen("题目名称.in","r",stdin);
freopen("题目名称.out","w",stdout);
}
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&arr[i]);
mxa=max(mxa,arr[i]);
}
if(debug==2) printf("%d*\n",mxa);
for(int i=1; i<=n; i++)
{
scanf("%d",&brr[i]);
mxb=max(mxb,brr[i]);
}
if(debug==3) printf("%d*\n",mxb);
if(mxa>mxb) printf("A");
else printf("B");
}
所以,这样就不会轻易爆0了。
再看看上面的代码,每个调试的debug值都不一样,如果要单独调试某一部分,就只需要更改debug,
不需要反复修改注释了!
更多技巧…