c语言编程常见错误集锦
来源:互联网 发布:手机淘宝店铺关注按钮 编辑:程序博客网 时间:2024/05/29 09:13
(1)书写标识符时,忽略大小写
main(){ int c=5; printf("%d",C);}
编译程序会出错。C语言区分大小写。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
(2)忽略变量类型,进行不合法运算
main(){ float a,b; printf("%d",a%b);}
%是求余运算,得到a/b的整余数。整型变量可进行求余运算,而实型变量则不允许进行求余运算。
(3)将字符常量与字符串常量混淆
char a;a="b";
字符常量是一对单引号括起来的常量,字符串常量是一对双引号括起来的常量。C语言规定以“\0”作为字符串结束标志,它是系统自动加上的,所以字符常量“b”其实包含两个字符'b' '\0'
,而把它赋给一个字符变量是不行的。
(4)忽略了“=”和“==”的区别
if(a==b)a=b;
C语言中,“=”是赋值运算符,“==”是关系运算符。在此代码中,前者是进行比较,后者是进行赋值。
(5)忘记加分号
c=1b=2
几乎在所有编程语言中,都是用“;”代表一句或多句语句的结束。
(6)多加分号
{ z=x/y; z=z%10; printf("%d",z);};
if(a%2==0);a+=a;
for(i=0;i<5;++i);{ a-=a; printf("%d",a);}
(7)忘加地址运算符“&”
int a;scanf("%d",a);
scanf函数的作用是:按照a在内存中的地址将a的值存进去。“&a”是指a在内存中的地址。
(8)输入数据的方式与要求不符
scanf("%a%b",&a,&b);
输入时不能用“,”将a,b隔开如:3,4
;应该用空格
scanf("%a,%b",&a,&b);
此时应输入a,b
才是正确的
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。正确形式应输入:abc
(10)输入、输出的数据类型与所用格式说明符不一致
int a=1;float b=1.2;printf("%f%d",a,b);
这种错误要引起重视,编译器不会出现错误,但运行结果错误。
(11)输入数据时,规定精度
scanf("%6.2lf",&a);
输入数据时不能规定精度。
(12)switch语句中漏写break语句
switch(grade){ case 'A':printf("90-100\n"); case 'B':printf("75-89\n"); case 'C':printf("60-74\n"); case 'D':printf("<60\n"); default:printf("put in error\n");}
由于漏写了break语句,case只起标识的作用,而不起判断的作用。当grade的值为A时,程序会从上到下执行完,五个printf都输出。正确的写法应为:
switch(grade){ case 'A':printf("90-100\n");break; case 'B':printf("75-89\n");break; case 'C':printf("60-74\n");break; case 'D':printf("<60\n");break; default:printf("put in error\n");break;}
(13)忽视while和do-while语句区别
while语句
main(){ int a=0,i; scanf("%d",&i); while(i<=10) { a+=i; ++i; } printf("%d",a);}
do-while语句
main(){ int a=0,i; scanf("%d",&i); do { a+=i; ++i; }while(i<=10); printf("%d",a);}
当输入的i值小于等于10时,两者输出结果无区别。当输入的i大于10时,while语句不执行循环体,do-while语句执行一次循环题。因为while语句先判断后执行,do-while语句先执行后判断。
(14)忽略自增(自减)运算符的细节
第一个区别, i++ 返回原来的值,++i 返回加1后的值
main(){ int a=0,b=0,i; scanf("%d",&i); a=++i; --i;//保证i值没变化 b=i++; print("a=%d,b=%d",a,b);}
输出结果: a=i+1 b=i
。因为a=++i;
是先把i加1再赋值给a,可以把此句分解为:i=i+1;a=i;
;b=i++;
是先把i赋值给b再加1,可分解为:b=i;i=i+1;
。
第二个区别,i++ 不能作为左值,而++i 可以
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。
int i = 1;int *p1 = &(++i); //正确int *p2 = &(i++); //错误++i = 6; //正确i++ = 8; //错误
(15)忽略sizeof()和strlen()的区别
char str[20]="Incredibly"; int a=strlen(str); /* a=10;strlen 计算字符串的长度,以\0'为字符串结束标记。 */int b=sizeof(str); /* b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响*/
(16)在定义数组时,将定义的“元素个数”误认为是可使用的最大下标
main(){ int a[5]={0,1,2,3,4}; printf("%d",a[5]);}
C语言中,定义时用a[5],表示a数组中有5个元素。其下标是从0开始的,数组中最后一个元素是a[4],不存在a[5]。
(17)定义数组时误用变量
int i;scanf("%d",#i);int a[i];//错
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组大小作动态定义。
(18)地址运算符&使用错误
char str[8];scanf("%s",&str);//错
C中,数组名代表地址。正确的应为:
char str[8];scanf("%s",str);
(19)同时定义了形参和函数中的局部变量
int x,y,z;int max(x,y){ z=x>y?x:y; return z;}
形参应在函数体外定义,而局部变量应在函数体内定义。正确的应为:
int x,y;int max(x,y){ int z; z=x>y?x:y; return z;}
以上若有错误,请立即指出,我立刻改正。
- c语言编程常见错误集锦
- C语言错误集锦
- C语言错误集锦
- C编程错误集锦
- android编程常见错误集锦
- c语言编程的常见错误
- C语言编程中常见的错误
- c语言、c++编程常见错误
- C语言编程中的常见错误总结
- C语言 函数编程的常见错误
- C语言编程常见错误与解决办法
- C语言错误提示集锦
- C语言常见错误
- C语言:常见错误
- 【C语言】常见错误
- c语言常见错误
- C语言常见错误
- C语言常见错误
- Spark Streaming 流计算优化记录(4)-时间都去哪儿了,关于调度与空转
- CCF 引水入城
- python pickle模块 序列化
- 找到一个学习caffe的好地方
- android studio jni开发的第一个范例
- c语言编程常见错误集锦
- 使用atp-get安装Python-pip时遇到如下问题,附解决方案
- nginx 配置http请求重定向至https
- Echart元素说明
- Spark Streaming 流计算优化记录(5)-分区与内存的优化
- 旋转 变色 缩放
- U-boot makefile 解读
- js获取浏览器内核信息
- win环境下docker 镜像文件更改