1 / 13
文档名称:

常见错误和程序调试.doc

格式:doc   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

常见错误和程序调试.doc

上传人:xxj16588 2016/7/7 文件大小:0 KB

下载得到文件列表

常见错误和程序调试.doc

相关文档

文档介绍

文档介绍:常见错误和程序调试 1. 常见错误分析 2. 程序调试常见错误分析要真正学好 C、用好 C 并不容易,“灵活”固然是好事, 但也使人难以掌握, 尤其是初学者往往出了错还不知怎么回事。 C 编译程序对语法的检查不如其他高级语言那样严格( 这是为了给程序人员留下“灵活”的余地) 。因此,往往要由程序设计者自己设法保证程序的正确性。调试一个 C 程序要比调试一个 PASCAL 或 FORTRAN 程序更困难一些。需要不断积累经验,提高程序设计和调试程序的水平。 C 语言有些语法规定和其他高级语言不同, 学****过其他高级语言的读者往往按照使用其他高级语言的****惯来写 C 程序,这也是出错的一个原因。下面将初学者在学****和使用 C 语言( 不包括 C++) 时容易犯的错误列举出来, 以起提醒的作用。这些内容在以前各章中大多已谈到, 为便于查阅, 在本章中集中列举, 供初学者参考, 以此为鉴。(1) 忘记定义变量。如: main( ){ x=3; y=6; printf("%d\n ", x+y); } C 要求对程序中用到的每一个变量都必须定义其类型,上面程序中没有对 x、y 进行定义。应在函数体的开头加 intx, y; 这是学过 BASIC 和 FORTRAN 语言的读者写 C 程序时常见的一个错误。在 BASIC 语言中, 可以不必先定义变量类型就可直接使用。在 FORTRA N 中,未经定义类型的变量按隐含的 I-N 规则决定其类型,而 C 语言则要求对用到的每一个变量都要在本函数中定义( 除非已定义为外部变量)。(2) 输入输出的数据的类型与所用格式说明符不一致。例如,若 a 已定义为整型, b 已定义为实型。 a=3;b=4 . 5; printf("%f %d\n" ,a, b); 编译时不给出出错信息,但运行结果将与原意不符,输出为 0. 000000 16402 它们并不是按照赋值的规则进行转换( 如把 转换成 4), 而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4 个字节, 只把最后两个字节中的数据按%d , 作为整数输出)。(3) 未注意 int 型数据的数值范围。一般微型计算机上使用的 C 编译系统,对一个整型数据分配两个字节。因此一个整数的范围为-215 ~ 215-1 ,即-32768 ~ 32767 。常见这样的程序段: int num; num=89101; printf("%d" , num); 得到的却是 23565 ,原因是 89101 已超过 32767 。两个字节容纳不下 89101 ,则将高位截去。见图 。即将超过低 16 位的数截去。即将 89101 减去 216( 即 16 位二进制所形成的模)。 89101-65536=23565 。有时还会出现负数。例如 num=196607; 输出得-1 。因为 196607 的二进制形式为 00 00 00 00 00 00 00 1011 11 11 11 11 11 11 11 去掉高位 10 ,低 16 位的值是-1(-1 的补码是: 11111**********) 。对于超过整个范围的数,要用 long 型,即改为 long int num; num=89101; printf("%ld" , num); 请注意, 如果只定义 num 为 long 型, 而在输出时仍用“%d ”说明符, 仍会出现以上错误。(4) 输入变量时忘记使用地址符。如: scanf("%d%d" ,a, b); 这是许多初学者刚学****C 语言时一个常见的疏忽, 或者说是****惯性的错误, 因为在其他语言中在输入时只需写出变量名即可,而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 函数中格式字符串中除了格式说明符外, 对其他字符必须按原样输入。因此,应按以下方法输入: 3,4 此时如果用“ 34”反而错了。还应注意,不能企图用 scanf("input a&b: %d , %d" , &a , &b); 想在屏幕上显示一行信息: input a&b: 然后在其后输入 a和b 的值, 这是不行的。这是由于有的读者以为 scanf 具有 BASIC 语言中的 I