c程序第16章-常见错误和程序调试

c程序第16章-常见错误和程序调试

ID:20562169

大小:173.50 KB

页数:60页

时间:2018-10-13

c程序第16章-常见错误和程序调试_第1页
c程序第16章-常见错误和程序调试_第2页
c程序第16章-常见错误和程序调试_第3页
c程序第16章-常见错误和程序调试_第4页
c程序第16章-常见错误和程序调试_第5页
资源描述:

《c程序第16章-常见错误和程序调试》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第16章常见错误和程序调试16.1常见错误分析16.2程序调试要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。C编译程序对语法的检查不如其他高级语言那样严格(这是为了给程序人员留下“灵活”的余地)。因此,往往要由程序设计者自己设法保证程序的正确性。调试一个C程序要比调试一个PASCAL或FORTRAN程序更困难一些。需要不断积累经验,提高程序设计和调试程序的水平。C语言有些语法规定和其他高级语言不同,学习过其他高级语言的读者往往按照使用其他高级语言的习惯来写C程序,这也是出错的一

2、个原因。16.1常见错误分析下面将初学者在学习和使用C语言(不包括C++)时容易犯的错误列举出来,以起提醒的作用。这些内容在以前各章中大多已谈到,为便于查阅,在本章中集中列举,供初学者参考,以此为鉴。(1)忘记定义变量。如:main(){x=3;y=6;printf("%d",x+y);}C要求对程序中用到的每一个变量都必须定义其类型,上面程序中没有对x、y进行定义。应在函数体的开头加intx,y;这是学过BASIC和FORTRAN语言的读者写C程序时常见的一个错误。在BASIC语言中,可以不必先定义变量类型就可直接使用。在FORT

3、RAN中,未经定义类型的变量按隐含的I-N规则决定其类型,而C语言则要求对用到的每一个变量都要在本函数中定义(除非已定义为外部变量)。(2)输入输出的数据的类型与所用格式说明符不一致。例如,若a已定义为整型,b已定义为实型。a=3;b=4.5;printf("%f%d",a,b);编译时不给出出错信息,但运行结果将与原意不符,输出为0.00000016402它们并不是按照赋值的规则进行转换(如把4.5转换成4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节中的数据按%d,作为整数输出)。(3)

4、未注意int型数据的数值范围。一般微型计算机上使用的C编译系统,对一个整型数据分配两个字节。因此一个整数的范围为-215~215-1,即-32768~32767。常见这样的程序段:intnum;num=89101;printf("%d",num);得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。见图16.1。即将超过低16位的数截去。即将89101减去216(即16位二进制所形成的模)。89101-65536=23565。图16.1有时还会出现负数。例如num=196607;输出得-1。

5、因为196607的二进制形式为00000000000000101111111111111111去掉高位10,低16位的值是-1(-1的补码是:1111111111111111)。对于超过整个范围的数,要用long型,即改为longintnum;num=89101;printf("%ld",num);请注意,如果只定义num为long型,而在输出时仍用“%d”说明符,仍会出现以上错误。(4)输入变量时忘记使用地址符。如:scanf("%d%d",a,b);这是许多初学者刚学习C语言时一个常见的疏忽,或者说是习惯性的错误,因为在其他语言中在

6、输入时只需写出变量名即可,而C语言要求指明“向哪个地址标识的单元送值”。应写成scanf("%d%d",&a,&b);(5)输入时数据的组织与要求不符。用scanf函数输入数据,应注意如何组织输入数据。假如有以下scanf函数:scanf("%d%d",&a,&b);有人按下面的方法输入数据:3,4这是错的。数据间应该用空格来分隔。读者可以用printf("%d%d",a,b);来验证一下。应该用以下方法输入:34如果scanf函数为scanf("%d,%d",&a,&b);对scanf函数中格式字符串中除了格式说明符外,对其他字符

7、必须按原样输入。因此,应按以下方法输入:3,4此时如果用“34”反而错了。还应注意,不能企图用scanf("inputa&b:%d,%d",&a,&b);想在屏幕上显示一行信息:inputa&b:然后在其后输入a和b的值,这是不行的。这是由于有的读者以为scanf具有BASIC语言中的INPUT语句的功能(先输出一个字符串,再输入变量的值)。如果想在屏幕上得到所需的提示信息,可以另加一个printf函数语句:printf("inputa&b:");scanf("%d,%d",&a,&b);(6)误把“=”作为“等于”比较符。在许多高级

8、语言中,用“=”符号作为关系运算符“等于”。例如,在BASIC或PASCAL程序中都可以写if(a=b)then…但在C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成if(a=b)pr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。