时间:2022-07-12 10:38:51
摘要:近年来,C语言不仅为计算机专业工作者使用,而且为广大计算机应用人员所喜爱和使用。在利用C语言开发应用程序时,由于C语言具有灵活的程序设计风格,语法限制不太严格,程序设计自由度大等特点。这就给许多初学C语言的人员造成了许多困难,为了能够快速找出并改正程序中的错误;该文通过对C语言程序设计中常见的错误问题进行分析与研究。给出了一些可供参考的实例及解决方法,为学习C语言程序设计的用户提供方便。
关键词: C语言;常见错误;程序调试;实例
中图分类号:TP312文献标识码:A文章编号:1009-3044(2009)35-9969-02
Analysis of Common Error Based on C Programming Language
GAO Ya-xia1, ZOU Hai-rong2
(1.Shaanxi Commercial School, Hanzhong 723000, China; 2.Shaanxi Institute Of Technology, Hanzhong 723000, China)
Abstract: In recent years, not only the computer professionals use C language, but also the majority of staff computer applications favorite and use. In the use of C language application development, due to C language has a flexible programming style, grammar constraints are less stringent and program design large degree of freedom and so on. This C language to a number of beginner and causing a number of difficulties, in order to be able to quickly identify and correct errors in the program; this paper, the C language program design issues common mistakes analysis and research. Gives some examples and reference solutions, in order to learn C language program designed users to provide with convenient.
Key words: C Language; common errors; debugging program; example
C语言是在国内外广泛流行、使用的一种计算机高级程序设计语言。它的主要特点是:概念简洁、数据类型丰富、表达能力强,运算符多且使用方便灵活。与其它程序设计语言相比较,具有灵活的编程风格,语法限制不太严格,程序设计自由度大(例如:一个语句可以采用多种方式,分多行撰写;对数组下标越界不做检查;整型、字符型和逻辑型的数据可以通用等)。这就给程序设计人员留下“灵活的余地”,但是由于这个灵活往往给程序调试,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的实例。看着有错的程序,不知该如何进行修改。通过在C语言的教学与研究过程中,分析了一些关于C语言程序设计时容易犯的错误实例,提供给学习C语言的同学及相关人员参考。
1 C语言常见错误实例与分析
实例1.Printf语句中“控制字符串”部分分写在不同的行。
例如:main()
{ printf(“* * * * *”\n
Very good!\n
* * * * * \n);}
该程序的目的是为了显示这样的结果: * * * * *
Very good!
* * * * *
但程序运行后却出现错误信息:“Unterminated string or character constant in function main”,对上述错误,只要在程序第二行、第三行的最后分别加上“\” 即可得到正确的结果,也就是说printf语句中的“控制字符串”部分分写在不同的行时加“\”连接。
实例2. 忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写if (m=10) then …,但C语言中,“=”是赋值运算符,“==”是关系运算符。
例如:if (m==10) m=n;
前者是进行比较,m是否和10相等,后者表示如果m和10相等,把n值赋给m。由于习惯问题,初学者往往很容易犯这样的错误。
实例3.定义变量的位置不正确。
例如:#include
main()
{ char ch,filename[10];
scanf(“%s”,filename);
FILE *fp;
fp=fopen(filename,“w”);
ch=getchar();
while(ch!=‘#’)
{ fputc(ch,fp);putchar(ch);ch=getchar();}
fclose(fp);}
程序运行后出现错信息“Improper use of a typedef symbol in function main”,只要把第六行:FILE *fp;放到第四行前,程序通过。原因是:说明部分要放在其他语句之前。
实例4.将字符常量与字符串常量混淆。
char ch;
ch="M";
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,而字符串常量是一对双引号括起来的字符序列。C规定以‘\0’作字符串结束标志,它是由系统自动加上的,所以字符串“M”实际上包含两个字符:‘M'和‘\0',而把它赋给一个字符变量是不正确的。
实例5.输入变量时忘记加地址运算符“&”。
int a,b;
scanf("%d%d",a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。“&b”指b在内存中的地址。
实例6.输入数据的方式与要求不符。
1) scanf("%d%d",&x,&y);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
1,5
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
2) scanf("%d,%d",&x,&y);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
1,5
此时不用逗号而用空格或其它字符是不对的。如下面输入不合法:
1 5 1:5
又如:scanf("a=%d,b=%d",&a,&b);输入应如以下形式:
a=1,b=5
实例7.输入字符的要求与格式不一致。
在用“%c”格式输入字符时,“转义字符”和“空格字符”都作为有效字符输入。
scanf("%c%c%c",&c1,&c2,&c3);
例如:输入O K !
则字符“O”送给c1,空格字符“ ”送给c2,字符“K”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
实例8. 同时定义了形参与函数中的局部变量。
int max(x,y)
int x,y,z;
形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:
int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z);}
实例9. 误用变量定义数组。
int n;
scanf("%d",&n);
int a[n];
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
实例10. 被调用的函数未在主函数中进行声明。
例如:main()
{ int a,b,*p1,*p2;
Scanf(“%d,%d”,&a,&b);
p1=&a;p2=&b;
if(a
printf(“5d,%d\n”,*p1,*p2); }
void swap(int *p1,int *p2)
{ int *p;
P=*p1;*p1=*p2;*p2=p; }
程序运行后出现错误信息:“Type mismatch in redeclaration of ‘swap’”,只要在程序的第二句int a,b;前加一句:void swap();程序运行通过。也就是说:被调用函数的定义出现在主调函数之后(除了函数的值是整型或字符型的),要在main()函数中对被调用函数进行说明,void型函数也不例外。
2 结论
通过上面这些实例的分析,可以看出,由于C语言的开放式编程风格,让C语言初学者,在进行C语言程序设计时往往会出现一些微妙的、不易觉察的错误。C语言作为一门完善的编程语言,具有它的科学性与严谨性。因此,只有在充分掌握和熟练运用C语言的基本概念、语法规范及结构的基础上,才能真正享受到C语言灵活自如的编程风格的魅力,这也是学习一切科学知识的基本方法。
参考文献:
[1] 谭浩强.C程序设计[M].北京:清华大学出版社,2008:37-242.
[2] 杨路明.C语言程序设计[M].北京:京邮电大学出版社,2006:20-150.
[3] 刘明,夏清国.C程序设计.导教-导学-导考[M].西安:西北工业大学出版社,2004:27-215.