第十章 程序常见错误分析
第十章 程序常见错误分析
C 语言是一种方便灵活、功能性很强的程序设计语言,但是对于初学者很难掌
握,尤其是出了错还不知道错误在哪儿,这是由于 c 编译程序对语法的检查不如其
他高级语言那样严格,往往要求设计者自己设法保证程序的正确性,因此调试一个
c 语言程序是不容易的,需要设计者不断积累经验,提高程序设计和调试的水平。
本章将初学者容易犯的错误集中列举出来,供初学者参考,另外,还介绍了调
试程序的一般方法,以便于初学者提高调试程序的能力。
10.1 常见错误分析
程序出错通常有两种情况:
一、语法错误。这种错误通常 c 语言编译程序会给出“出错信息”,并且告诉你
在哪一行出错,程序
设计者只要细心,会很快发现并排除这类错误。
二、逻辑错误。这种错误通常 c 语言编译程序不会检查出来,因此它比语法错
误更难检查,这就要求
程序设计者必须要有丰富的经验,才能很快的解决。有时可能设计者忘记加某种符
号,例如,复合语句的花括号,而导致程序出错,这种错误经过仔细检查,还是可
以发现的。但是,如果程序从算法上就有问题,那修改和检查起来就非常困难了,
像这种错误,在这里不作赘述。
下面将程序中常见的错误列举出来,供初学者参考,并以此为鉴。
1.没有定义变量
在 c 语言程序中,变量一般是先定义后使用。
例如:
main ()
{int x=10,y=2;
s=x*y+3;
printf(“%d\n”,s);
}
编译后,编译程序在程序第三行给出出错信息“Undefined symbol 's' in function
main ”,意思是在 main 函数中第三行有未定义的符号‘s ’,如果在程序开头这样写
“int x=10,y=2,s; ”上面的程序就顺利通过编译程序了。
再如:
127
第十章 程序常见错误分析
main ()
{int x=10;y=2;
printf (“%d\n”, x*y+3);
}
编译后,编译程序在程序第一行给出出错信息“Undefined symbol 'y' in function
main ”,在定义类型一致的多个变量时,变量之间用逗号隔开,如果用分号隔开说明
这句定义语句结束,后面的变量就没有被定义,如果将“y =2 ;”这句前的分号改成
逗号,程序就不会出错了。这种错误是初学者最爱犯的错误。
2 .未注意数据的数值范围
各种不同类型的数据类型表示数的范围不同,例如,int 类型的数占 2 个字节,
表示范围-32768~
32767,如果所表示的数超过这个范围,结果就会出错,如下面的程序段:
int num;
num=89101;
printf(“%d”,num);
程序运行结果是 23565 ,而不是 89101,原因是 89101 已超过了32767,两个字节容
不下 89101,则将高位截取。见图 12.1
00 00 00 00 00 00 00 01 01 01 11 00 00 00 11 01 89101:
23565 :
01 01 11 00 00 00 11 01
3 .输入输出的数据类型与所用格式说明符不一致
输入输出的数据类型应与所用格式说明符匹配,否则将会导致运行结果与原意
不符。
例如下面的程序段:
int a=3;
float b=4.5;
printf(“%f,%d\n”,a,b);