基于C语言程序设计的常见错误分析

时间:2022-07-12 10:38:51

基于C语言程序设计的常见错误分析

摘要:近年来,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.

上一篇:Origin8.0软件在大学物理实验中的应用 下一篇:基于小波变换的图像融合方法研究