下面给大家讲讲调试
先看一个程序 求1!+2!+3!.....+n!
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(){ /*求1!+2!+3!.....+n!*//*二重循环*/ int n; printf("请输入n的值:"); scanf("%d", &n); int sum2 = 0;/*保存最终结果*/ int sum1 = 1;/*保存n!的结果*/ /*一重循环求1!+ ....n!*/ for (int u = 1; u <= n; u++){ /*二重循环求n!*/ for (int i = 1; i <= u; i++){ sum1 = sum1*i; } sum2 = sum2 + sum1; } printf("=%d\n", sum2); system("pause"); return 0; }
大家有没有发现这个代码有bug
调试bug的基本思路:
1.先观察现象,确定当前这样的现象是否是bug
2.定位问题,确定bug出现在代码的哪个部分,精确到行
3.分析问题原因
4.指定解决方案,修改问题
5.回归测试,检查刚才的bug有没有解决,以及是否引入新bug
核心就是定位bug,如何定位bug,核心思路"二分查找"
借助调试器"查看中间结果"
VS内置了调试器功能(各种调试器的基本功能都类似)
调试器的核心操作主要有:
1.打断点.让程序执行到某行就停下来
2.调试执行.使用F5来调试执行,SHIFT F5结束执行
接下来我们解决这个bug,首先打上断点 F5开始调试
开始执行后发现第三次循环中sum1的值出错
从新打断点调试
调试后发现就n!的第二次循环中sum1的值为4,原本值应该为2
继续执行我们发现n!的第三次循环中sum1的值为12,原本值应该为6
从这里分析出我们的问题
在算3!时sum1的初始值为2,是2!的结果,所以我们这个需要加入一个条件
使sum1在每一次循环时的初始值都为1;
修改后的代码
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(){ /*求1!+2!+3!.....+n!*//*二重循环*/ int n; printf("请输入n的值:"); scanf("%d", &n); int sum1 = 1; /*保存n!的结果*/ int sum2 = 0;/*保存最终结果*/ /*一重循环求1!+ ....n!*/ for (int u = 1; u <= n; u++){ /*二重循环求n!*/ int i = 0; sum1 = 1; for (i = 1; i <= u; i++){ sum1 = sum1*i; } sum2 = sum2 + sum1; } printf("=%d\n", sum2); system("pause"); return 0; }
程序员工作大部分时间都是在找bug,而不是敲代码.
所以大家脑子里一定要有调试bug的基本思路,并且要活用打断点来调试.
标签:int,sum1,循环,bug,调试,调试器 来源: https://www.cnblogs.com/enjoyC/p/14546746.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。