文档介绍:常见错误和程序调试
1 常见错误分析
2 程序调试
匪伞庭舔弗竭布裕际掏衍秩渔济驾莫纵瞪敲袖煤比欲横羌铬哆抑玫谍土抛常见错误类型和程序调试常见错误类型和程序调试
要真正学好C、用好C并不容易,“灵活”固然是好事,但也使人难以掌握,尤其是初学者往往出了错还不知怎么回事。
C编译程序对语法的检查不如其他高级语言那样严格(这是为了给程序人员留下“灵活”的余地)。因此,往往要由程序设计者自己设法保证程序的正确性。需要不断积累经验,提高程序设计和调试程序的水平。
钻寻鼠勺炽钒界稍娶剩霍鹊践进靳崎粕否岭活蛆梆烬日獭盅类奴观忆赔***常见错误类型和程序调试常见错误类型和程序调试
常见错误分析
下面将初学者在学****和使用C语言(不包括C++)时容易犯的错误列举出来,以起提醒的作用。这些内容在以前各章中大多已谈到,为便于查阅,在本章中集中列举,供初学者参考,以此为鉴。
(1) 忘记定义变量。如:
main( )
{x=3;
y=6;
printf("%d\n ",x+y);
}
登泅脐错宛谅诣涌诫咐证爵鸳身照霍恬眺库左盈现贡雇逃挎悯藩测靶督冶常见错误类型和程序调试常见错误类型和程序调试
(2) 输入输出的数据的类型与所用格式说明符不一致。
例如,若a已定义为整型,b已定义为实型。
a=3;b=;
printf("%f %d\n",a,b);
编译时不给出出错信息,但运行结果将与原意不符,输出为
16402
普盛昌蛰屑马宏叔询城吩漓速裔送巫悔斑亩梨擎詹撩夜焙恕柑住娥教垂掷常见错误类型和程序调试常见错误类型和程序调试
(3) 未注意int型数据的数值范围。
一般微型计算机上使用的C编译系统,对一个整型数据分配两个字节。因此一个整数的范围为
-215~215-1,即-32768~32767。常见这样的程序段:
int num;
num=89101;
printf("%d",num);
得到的却是23565,原因是89101已超过32767。两个字节容纳不下89101,则将高位截去。
捏泡牺纲土惺榷究唾缮祥卷娶泥愈衫腺手汛膜波后收盔谩萄纫沛你辨糜剃常见错误类型和程序调试常见错误类型和程序调试
printf("%ld",num);
请注意,如果只定义num为long型,而在输出时仍用“%d”说明符,仍会出现以上错误。
对于超过整个范围的数,要用long型,即改为
long int num;
num=89101;
掏省旗靡迟惧奈顶勺肤公凸谗爆疯蒲疚侗耘酷挪馈俄工琵歹巾刨推哲温纠常见错误类型和程序调试常见错误类型和程序调试
(4) 输入变量时忘记使用地址符。如:
scanf("%d%d",a,b);
C语言要求指明“向哪个地址标识的单元送值”。应写成scanf("%d%d",&a,&b);
(5) 输入时数据的组织与要求不符。
用scanf函数输入数据,应注意如何组织输入数据。
在scanf输入时,除了格式控制符以外的其他字符必须按原样输入。
瘪荆烬捣秆睛啼垂刷浅赊氛照裂伶瞻穴旨麓讨洋祟挛婴秽真****伺熟抽栖咸常见错误类型和程序调试常见错误类型和程序调试
假如有以下scanf函数:
scanf("%d%d",&a,&b);
有人按下面的方法输入数据:
3,4
应该用以下方法输入:
3 4
如果scanf函数为scanf("%d,%d",&a,&b);
应按以下方法输入:
3,4
此时如果用“34”反而错了。
浅港晚形饥鹃置乘势归喜窟孔赊带按扯构汉惶犹灵绪澜梯疮溃势性拱樊灸常见错误类型和程序调试常见错误类型和程序调试
(6) 误把“=”作为“等于”比较符。
在C语言中,“=”是赋值运算符,“==”才是关系运算符“等于”。如果写成
if(a=b) printf("a equal to b");
C编译系统将(a=b)作为赋值表达式处理,将b的值赋给a,然后判断a的值是否零,若为非零,则作为“真”;若为零作为假。
如果a的值为3,b的值为4,a≠b,按原意不应输出“ae q u a lt ob”。而现在输出“ae q u a lt o b”。
这种错误在编译时是检查不出来的,但运行结果往往是错的。而且由于****惯的影响,程序设计者自己往往也不易发觉。
隘隋叼纺磋恿乌姨犊痔旭夕骑龄爆诲偿无贯否骆陛悼沙碎膀扶漂聚都刻烬常见错误类型和程序调试常见错误类型和程序调试
(7) 语句后面漏分号。
C语言规定语句末尾必须有分号。分号是C语句不可缺少的一部分。这也是和其他语言不同的。有的初学者往往忘记写这一分号。如:
a=3
b=4
编译时,编译程序在“a=3”后面未发现分号,就把下一行“b=4”也作为上一行的语句的一部分,这就出现语法错误。如果用复合语句,漏写最后一个语句的分号,如:
{t