正文

C语言中使用中常见的错误分析2006-05-07 02:26:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wojiele/13644.html

分享到:

1  引言

       C语言是比较通用的一种程序设计语言,具有数据类型多样、函数丰富、运算灵活、生成目标程序效率高、应用面广、可移植性好、且可以直接对硬件系统进行控制操作等优点而受到广泛的欢迎,目前很多高校都开设了C语言课程。但由于C语言书写比较灵活,语法限制不严,对初学者来说容易出错。笔者在教学中针对学生学习C语言时常见错误进行了分析,供初学者借鉴。

2  C语言使用中常见的错误

2.1   系统设置错误编译时出现“LinkerError:Unabletoopeninputfile‘COS.OBJ’”错误信息。说明连接目录在错误,改正的方法是在菜单“Option”中“Directories”需重新设置“Includedirectories”、“Librarydirecto-ries”和“Turbocdirectories”,如果TC安装在D:\TC目录下,那么以上三项分别应设置为“D:\TC\INCLUDE”、“D:\TC\LIB”、“D:\TC\TC”,然后使用菜单“Option”→“Saveoptions”保存当前的设置。这种错误常发生在TC不是安装在C盘的根目录下,因为系统默认是C盘的设置。

2.2  大小写错误C语言规定所有的关键字必须小写,而标识符中的字母则既可以大写,也可以小写,标识符不能与关键字相同,并区分大小写字母。例如,else是关键字,不能作为标识符使用,而ELSE可以作为标识符使用。

 2.3  漏写分号、花括号在C语言中,规定一个语句必须以分号结束或花括号结束,如:intx=1;{inty=2;y+=x;printf("%d,%d\n",x,y);}应注意,复合语句中的最后一个语句仍然需要分号,最后一个“}”不能省略。比较容易忽视的是在“}”之后的分号,如一个类型的定义之后必须使用分号,包括结构体、联合体和枚举。如:structst{intx,*y;};

2.4  混淆“=”与“==”的区别在C语言中“=”是赋值运算符,不能作等号使用,这与其它高级语言是有区别的,而“==”是关系运算符,比较两个数据是否相等,且“==”比“=”优先级别高,如:main(){intx=1,y=2;printf("%d\n",x=y==x+1);}输出结果为:1。

2.5 scanf()函数输入变量漏写或多加地址运算符“&”如:intx;chars[5];scanf("%d",x);/*x前遗漏&*/scanf("%s",&s);/*s前多加了&,因为数组名是地址*/在C语言中,scanf()函数的输入项必须用地址表示,作用是:依照x在内存中的地址将x的值存入进去,而数组名s代表的是该数组在内存中的起始地址,因此,遗漏或多加地址运算符“&”必然导致错误。另注意,每次调用scanf()函数后,将返回一个整数值,其大小等于输入的字符个数,如:printf("%d\n",scanf("%d%d",&x,&y));如输入了两个数,则输出结果为2。

2.6 忽略printf()函数的求值顺序如:main(){inti=5;printf("%d,%d,%d\n",++i,i--,i+2);}程序的结果很容易误判为:6,6,7,而Turboc在执行printf()函数时,参数自右向左依次压入栈中,即先压入i+2参数的值入i--的值,最后将参数++i的值压入,弹出时则依次为++i、2,即当printf()函数中出现多项表达式输出项时,printf()按到左顺序计算各表达式的值,然后再输出结果。因此以上正确结果应为:5,5,7。

2.7 逻辑表达式的计算错误例1:main(){inti,j,k,s;i=j=k=1;s=--i||--j&&++k;

阅读(4509) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册