C语言编程时常犯错误

上传人:沈*** 文档编号:142854442 上传时间:2022-08-25 格式:DOC 页数:5 大小:54.50KB
返回 下载 相关 举报
C语言编程时常犯错误_第1页
第1页 / 共5页
C语言编程时常犯错误_第2页
第2页 / 共5页
C语言编程时常犯错误_第3页
第3页 / 共5页
点击查看更多>>
资源描述
C语言编程时常犯错误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和0,而把它赋给一个字符变量是不行的。4、忽略了“=”与“=”的区别。在许多高级语言中,用“=”符号作为关系运算符“等于”。但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);对于复合语句来说,最后一个语句中最后的分号不能忽略不写。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;I5;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=49、输入字符的格式与要求不一致。在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。 scanf(%c%c%c,&c1,&c2,&c3);如输入a b c字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。10、输入输出的数据类型与所用格式说明符不一致。例如,a已定义为整型,b定义为实型 a=3;b=4.5; printf(%f%dn,a,b);编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。11、输入数据时,企图规定精度。 scanf(%7.2f,&a);这样做是不合法的,输入数据时不能规定精度。12.switch语句中漏写break语句。例如:根据考试成绩的等级打印出百分制数段。switch(grade)case A:printf(85100n);case B:printf(7084n);case C:printf(6069n);case D:printf(60n);default:printf(errorn); 由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如case A:printf(85100n);break;13、忽视了while和do-while语句在细节上的区别。(1)main()int a=0,I;scanf(%d,&I);while(I=10)a=a+I;I+;printf(%d,a);(2)main()int a=0,I;scanf(%d,&I);doa=a+I;I+;while(I10时,二者结果就不同了。因为while循环是先判断后执行,而do- while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。1. c环境下变量使用前没有集中定义!2. 不要在双引号之外使用汉字符号!3. 变量使用前没有初始化,导致结果为不定值!4. 字符型常量要用单引号括起来!5. 字符串常量要用双引号括起来!6. 两整数相除结果取整影响程序结果!7. %模运算两边只能是整形或字符型!8. 将浮点数进行精确比较!如if(f=0)导致程序意外!9. scanf(“%f,”var);变量名前忘加&!10. scanf(“%6.2f,”&var);指定浮点数的输入精度!11. scanf(“%.”,变量列表);prinf(“%.”,变量列表); 语句中输入输出类型与列表中变量类型不匹配!12. =与=使用意义混淆!13. 使用错误的逻辑表达式!如企图用if(abc)表达if(ab&bc)14. 对逻辑表达式求值时没有注意“最少计算步骤原则”!15. 没有注意运算符的优先次序!如if(x=z=y) 理解为if(x=z)=y)16. 没有注意函数实参为多个表达式时,求值顺序是从右至左!如printf(“”,i,i+);17. 多条语句作为结构性语句的语句组时,没有用花括号括起来!导致程序结构混乱!18. 左右大括号或ifelse不匹配!19. 使用库函数时没有包含相应的头文件!如使用sin,cos,sqrt,fabs,pow等函数时,不要忘写#include使用getch,putch,exit(-1)等函数时,不要忘写#include20. do while()语句后面忘加分号!21. while(); for();后面加分号导致循环体为空语句!22. for(初始表达式,条件表达式,循环变量表达式)中用逗号作为分隔符!23. 数值型数据相互赋值时应注意数据丢失及符号改变!24. switch(表达式)中表达式只能是整形或字符型表达式!不能是float或double型!25. switch ()case: 常量或常量表达式:语句关键字case之后只能是常量或常量表达式!26. switch_case:_break_default:结构语句:首先是找入口、没有case 匹配值就以default作为入口,从入口处往下执行各语句(包括下面其他case:之后语句),遇到break可跳出该层switch结构!27. for(初始;条件表达式;循环变量表达)if()continue如果continue被执行将会跳到循环变量表达式而不是跳到条件表达式!while和do_whlie跳到条件表达式!28. printf(“%,”);才可打印出%和29. %u,%o,%x无符号位;%d考虑符号位!30. 八进制、十六进制常量分别以0、0x开头!31. ?:表达式中的操作对象可以是不同的类型,且其值取较高 的类型!32. if_else_if和switch_case_break常用来实现多分支选其一结构!33. 熟练使用交换语句!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!