C语言中常见错误(转贴) 
c语言吧
全部回复
仅看楼主
level 1
likailinux 楼主
C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,本人通过对C的学习,积累了一些C编程时常犯的错误,写给各位学员以供参考。1.书写标识符时,忽略了大小写字母的区别。main(){int a=5;printf("%d",A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。2.忽略了变量的类型,进行了不合法的运算。main(){float a,b;printf("%d",a%b);}%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。3.将字符常量与字符串常量混淆。char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。4.忽略了“=”与“==”的区别。在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写if (a=3) then …但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。{ z=x+y;t=z/100;printf("%f",t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。6.多加分号。对于一个复合语句,如:{ z=x+y;t=z/100;printf("%f",t);};复合语句的花括号后不应再加分号,否则将会画蛇添足。又如:if (a%3==0);I++;本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。再如:for (I=0;I<5;I++);{scanf("%d",&x);printf("%d",x);}本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。7.输入变量时忘记加地址运算符“&”。int a,b;scanf("%d%d",a,b);这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。8.输入数据的方式与要求不符。①scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4 输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。②scanf("%d,%d",&a,&b);C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:3,4 此时不用逗号而用空格或其它字符是不对的。3 4 3:4 又如:scanf("a=%d,b=%d",&a,&b);输入应如以下形式:a=3,b=4 9.输入字符的格式与要求不一致。在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。scanf("%c%c%c",&c1,&c2,&c3);如输入a b c 字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
2005年09月14日 04点09分 1
level 0
ding 好东西
2005年09月14日 13点09分 4
level 0
一个字,顶...
2005年09月16日 07点09分 5
level 0
大家顶啊!!!!!!好东西哦
2005年09月16日 10点09分 6
level 0
是很好 不过应该再加一些难度 谢谢
2005年09月17日 06点09分 7
level 0
............顶顶顶顶顶顶 ................顶 ...............顶 顶顶顶顶 ....顶顶顶顶顶 ..顶 .......顶 .....顶 ..顶 .......顶 .顶 .顶 ..顶 .......顶 .顶 .顶 ..顶 .......顶 .顶 .顶 ..顶 .......顶 .顶 .顶 顶 顶 .......顶 顶顶 顶 .顶 ..........顶 .顶 ........... 顶 .....顶
2005年09月17日 07点09分 8
level 0
我与2005年9月18号晚上7点参加了三级网络技术的c语言的上机考试,我抽到的是关于100产品,按产品的名称从小到大排序,如果产品名称相同则按产品的金额从小到大排序,这个题大家在南开100题中是见到过的而且都会做,但是我今天做的可以说和参考答案是一摸一样,当我运行的时候屏幕上就是一块黑屏,什么也没有,无论运行的结果是正确还是错误,它就是什么也没有,我又从新检查了一扁程序没有什么错啊!同学与我同一考场有100多人中也有6个人抽到了与我一样的关于产品的这个程序题,他们也与我一样出现了同样的错误,问监考教师是怎么回事?他们也可怜的回答道:“我们也不知道是出了什么事,你们自己多看看吧,如果不行那只能够说你们运气不好了!”我这次死得好冤啊!苍天啊!不知道还有没有其他的人与我同样遭遇的难友啊!有的加我啊!我们倾诉倾诉!安慰安慰!QQ:66072037,在加我时请要说明!
2005年09月17日 17点09分 9
level 7
你的苦衷我们知道了~以后不要乱发
2005年09月18日 02点09分 10
level 0
我几乎都遇到过,不错↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑支持支持↑↑↑↑↑↑↑↑支持支持↑↑↑↑↑↑↑↑支持支↑持↑↑↑↑↑↑支持支持↑↑支持↑↑↑↑↑↑↑↑↑支↑↑持支持支持↑↑↑↑↑↑支↑持支↑↑持支↑↑↑↑↑↑持↑支↑持↑支持↑↑↑↑↑↑支↑持↑支↑持支↑↑↑↑↑↑持↑支↑持↑支持↑↑↑↑↑↑支↑持↑支↑持↑↑↑↑↑↑↑支↑持↑支↑持↑↑↑↑↑支持支↑持支持↑↑↑↑↑↑↑↑支持↑↑支持支↑↑↑↑↑↑↑持↑↑↑支↑持支↑↑↑↑↑↑↑↑↑持↑↑↑支持↑↑↑↑↑↑↑支持↑↑↑支持↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
2005年10月15日 14点10分 12
level 0
请参见更复杂些的常见错误:http://blog.csdn.net/Tycool/archive/2004/08/25/84125.aspx
2006年04月08日 05点04分 13
level 1
hehe 还有呢?继续继续啊
2006年04月08日 07点04分 14
level 0

2006年04月16日 09点04分 15
level 0
谁知道C语言网站多写点.
2006年05月31日 05点05分 16
level 1
看了学习下``楼猪多加油``
2006年09月02日 00点09分 17
level 0
顶! 好东西
2006年09月23日 08点09分 18
level 0

2006年09月23日 15点09分 19
level 0
static int a[3] = {1,2,3}的说法不对,不是static的数据也可以这样初始化。
2007年01月09日 07点01分 20
level 0
顶,很好的总结
2007年01月09日 10点01分 21
level 1
我是个初学者,这些问题,我也经常出现,现在看起来,学C语言,也要注意细节
2007年01月23日 01点01分 23
level 7
我看到这个贴的第一个反应是:冥王星了都第二个反应是:又有人挖坟……
2007年01月23日 10点01分 24
1 2 3 尾页