程序调试

引入

在程序设计中,总是会有一些神奇的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,
不需要反复修改注释了!
更多技巧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值