资源描述:
《C语言程序设计 第2版 教学课件 作者 李敏C语言常见错误.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言常见错误C语言编程时常犯的错误总结如下:1.书写标识符时,忽略了大小写字母的区别。main(){intb=5;printf("%d",B);}编译程序把b和B认为是两个不同的变量名,从而显示出错信息。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。 2.将字符常量与字符串常量混淆。charc;c="a";字符常量是用一对单引号括起来的单个字符,字符串常量是用一对双引号括起来的单个字符或字符序列。C语言规定以' '作字符串结束标志,它是由系统自动加上的。所以字符串"a"实际上包含两个字符:'a'和' ',而把它赋给一个字符
2、变量是不行的。3.忽略了变量的类型,进行了不合法的表达式运算。floata,b;intc;c=a%b;“%”是求余运算,只允许整型变量进行求余运算,实型变量不允许进行求余运算。4.忽略了“=”与“==”的区别。在C语言中,“=”是赋值运算符,“==”是关系运算符。如:if(a==7)a=b;前者是比较a是否和7相等,后者表示如果a和7相等,把b值赋给a。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=15a++编译时,编译程序在“a=15”后面没发现分号,就把下一行“a++”也作为上一行语句的一部分,这就会出现语法错误。
3、改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。6.多加分号。有如下复合语句:{a=17;b=9;t=a/b;printf("%d",t);};在复合语句的花括号后不应再加分号,否则将会画蛇添足。又如:if(a>b);m=a;本义是如果a大于b,则把变量a赋给m。由于在if(a>b)之后多加了分号,则if语句到此结束,不论a是否大于b,均将a赋给m。7.使用格式输入函数为变量输入数据时,忘记加取地址运算符“&”。如:inta,b;scanf("%d%d",a,b);这是不合法的。scanf函数的作用是:把输入的
4、数据存放到变量所指向的存储单元中去。a、b只是变量的名字,不表示变量的存储地址,所以应该在变量的前面加上取地址符,即: scanf("%d%d",&a,&b);8.使用格式输入函数时,输入数据的方式与输入格式要求不符。1)scanf("%d%d",&a,&b);如果按如下方式输入数据:16,46↙是不合法的。在输入函数的格式控制部分,如果两个格式说明符之间没有任何分隔符,输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键或跳格键tab间隔。2)scanf("%d,%d",&a,&b);对于上面的格式输入函数,输入数据时,在两个数据之间
5、只能用逗号隔开。C语言规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。所以输入数据的形式是:16,46↙又如:scanf("a=%d,b=%d",&a,&b);输入形式如下:a=16,b=46↙9.输入字符的格式与要求不一致。在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。例如:scanf("%c%c",&ch1,&ch2);如果希望把字符'a'送给变量ch1,把字符'b'送给变量ch2,输入字符'a'、'b'时,两者之间不能用空格分隔,如:aVb↙是错误的
6、,此时字符'a'送给ch1,空格字符送给了ch2。因为空格也被认为是一个字符,正确的输入方法是在两个字符之间用回车键或Tab键分隔开,也可以直接按如下形式输入: ab↙10.输入数据时,为数据规定精度。例如:floata;scanf("%5.1f",&a);是不合法的。输入数据时不能规定精度,在格式输出函数中可以规定数据的输出精度。11.输入输出的数据类型与所用格式说明符不一致。有如下定义:inta=9;floatb=8.5;printf("%f%d",a,b);编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。12.在需
7、要的情况下,switch语句中漏写break语句。例如:根据考试成绩的等级打印出百分制数段。switch(grade){case'A':printf("85~100");case'B':printf("70~84");case'C':printf("60~69");case'D':printf("<60");default:printf("error");}当grade值为'A'时,根据switch语句的运行规则,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf语句。这样,switch语句起不到判断
8、的作用,不能正确反映所要求的输出结果。正确写法应在每个分支后再加上break;语句。改为如下:switch(grade){case'A':printf