浅述C语言程序调试过程及编程常见错误
浅述C语言程序调试过程及编程常见错误
[摘要]在讨论说明C语言程序调试过程的基础上,根据实践,结合实例,总结程序调试运行过程中常出现的错误,并依据C语言的语法格式和编程规则,对这些错误进行详细的说明和纠正,以提高学习者的编程效率。
[关键词]C语言调试编译语法错误逻辑错误
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0710049-01
《C语言程序设计》作为一门计算机技术基础课程,在国内外得到了广泛应用。它功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高。但是由于C语言涉及到的概念比较复杂,规则繁多,使用灵活,不少初学者在学习使用时都感到编辑的程序调试运行时容易出错。鉴于此,本文在讨论说明C语言程序调试过程的基础上,结合实例总结了程序调试运行过程中常出现的错误,以便给学习者以帮助。
一、C语言程序调试过程
所谓程序调试是指检查程序的错误以及改正程序的错误。调试程序一般包括以下四个阶段:1.编写程序并查错;2.在C语言的编译系统(Turbo C或者VC++6.0)中编辑源程序;3.对程序进行编译链接,并及时发现程序中存在的错误;4.最后改正错误。C语言程序的错误主要分为两类:语法错误和逻辑错误。
二、C语言编程过程中常见错误
(一)常见语法错误分析
1.书写主函数时需要注意的问题。
例:
main
{ int i,j,z;
scanf("%d,%d",&i,&j);
z=i+j;printf("%d",z);
}
此程序在编译时会提示:Declaration syntax error。出现此提示说明在源文件中,可能是某个说明丢失了某些符号或输入了多余的符号。此程序就是丢失了main函数后面的“( )”。初学者比较容易犯这个错误。主函数正确的写法是main( )。
2.语句后面漏写分号。
例: main( )
{printf(“?h”?
}
C语言规定语句末尾必须有分号。分号是C语句不可缺少的一部分。此例中printf(“?h”?语句后面未写分号,会提示Statement missing ; in function main。我们根据此提示来修改程序。这也是初学者比较容易犯的错误。
3.在不该加分号的地方加了分号。
例:
int a=3,b=2;
if(a>b);printf("max=%d\n",a);
此程序本意为当a>b时输出“max=3”的信息。但由于在if(a>b)后加了分号,因此if语句到此结束。即当(a>b)为真时,执行一个空语句,本来想a≤b时不输出上述信息,但现在printf函数语句并不从属于if语句,而是与if语句平行的语句,所以,无论a是否大于b,都会输出“max=3”的信息。因此在if、switch、for、while语句中,不要多加分号。
4.在调用库函数时,没有写预编译命令。
例:
main()
{charc;
printf("Please input one character: ");
c=getchar( );/*输入1个字符并赋给ch */
putchar(c);
}
调试程序时,出现错误提示:Undefined symbol'_getchar' Undefin
ed symbol'_putchar'。因为在使用库函数时,要用预编译命令#include将有关的头文件包括到用户源文件中。因此,必须在程序的开头加上预编译命令:#include “stdio.h”。
(二)常见逻辑错误分析
1.输入输出的数据的类型与所用格式说明符不一致。
例:
main()
{ int x;float y;
scanf("%f,%d",&x,&y);
printf("%f%d\n",x,y);}
此段程序中x定义为整型,y定义为实型。而在输入输出x,y时用的格式说明符为%f,%d,这显然与定义不符。程序运行时并不提示语法错误,但是不能得出正确结果。因此,输入、输出函数语句分别应改为:scanf("%d,%f",&x,&y); printf("%d%f\n",x,y);
2.复合语句忘记加花括弧。
例:
main()
{ int day,x1,x2=1;
for(day=9;day>0;day--)
x1=(x2+1)*2;x2=x1;
printf(“total=%d\n”,x1);
}
此程序本意是从第二次循环开