当前位置:文档之家› c语言常见错误分析

c语言常见错误分析


使用scanf函数时,忘记用地址符&
int a,b; scanf("%d%d",a,b); 应改为: scanf("%d%d",&a,&b); 但如果是向字符数组输入数据,数组名前不用加&,如: char a[20]; scanf("%s",a); 因为数组名就是数组首地址。
输入数据的形式与要求不符
如: char sex; sex=“M”; //应为sex='M'; ... 这里sex是字符变量,只能存放一个字符。而字 符常量是用单引号包含的,双引号包含的是字 符串常量。如“M”对应字符串,内存中存放了 两个字符:‘M’和‘\0’。
忘记对所调用的函数进行函数原型声明
int main() {float a,b,c; a=3.5;b=-7.6; c=max(a,b); printf("%f\n",c); return 0; } float max(float x,float y) {return(z=x>y?x:y);} 这里,由于max函数定义在后,编译会报错。所以需在main函数中加 上函数原型的声明: float max(float x,float y);
括号不配对
如: while ((c=getchar()!='\n') putchar(c); 这里while语句漏了一个右括号,应改为 while ((c=getchar())!='\n') putchar(c);
误把“=”作为“等于”运算符
如: if (score=100) n++; 在C语言中,“==”才是关系运算符“等于”, 而“=”则是赋值运算符。 应改为: if (score==100) n++;
常见错误分析
-- C语言易犯错误举例
忘记定义变量
int main() { x=3; y=6; printf("%d\n",x+y); }
C语言要求对程序中遇到的每一个变量都定义其类型。 如:int x,y;
输入输出的数据类型与格式不一致
int a=6; float b=4.5; printf("%f,%d\n",a,b); 编译时不给出出错信息,但输出结果与原意不符。 应改为: printf("%d,%f\n",a,b);
误以为数组名代表数组中全部元素
int main() {int a[4]={1,3,5,7},b[4]; b=a; …. } 这里企图把a数组的全部元素的值赋给b数组,这 是错误的。C语言中数组名只代表数组的首地 址,数组元素需分别赋值。
混淆字符数组与字符指针的区别
如: int main() {char str[10]; str="Computer and C"; printf(“%s\n”,str); …. } 上述代码编译出错。因为str是数组名,代表数组首地址。 编译时系统为数组分配了一段内存单元,在程序运行期 间str是一个常量,不能被赋值。 但字符数组初始化的同时可赋值,如: char str[ ]="Computer and C";
在引用Байду номын сангаас针变量之前没有对它赋予确定的值
如: int main() {char *p; scanf("%s",p); .... }
因为指针变量p未赋值就引用它,其值是不确定的,输入数据到p 对应的单元有可能产生危险。可改为:
{char *p;c[20]; p=c; scanf("%s",p);
混淆字符和字符串表示形式
假如有以下scanf语句: scanf("%d%d",&a,&b); 输入的数据为:3,4 -- 错误 输入应为3 4(用空格分隔) 如需用逗号分隔,scanf语句应为: scanf("%d,%d",&a,&b);
语句后面漏分号
如: a=3 b=4; 这里a=3后漏了分号,编译会报错。 但预处理语句行末不用加分号,如: #include <stdio.h> 后面不用加分号。
不该加分号处加了分号
如: for (i=0;i<10;i++); {scanf("%d",&x); printf("%d\n",x*x); } 这里for语句后加了分号,循环体变成了空语句, { }中原来的循环体在执行完for语句后执行一次。
对应有花括号的复合语句,忘记加花括号
如: sum=0;i=1; while (i<=100) sum=sum+i; i++; 这里由于没有加{},循环体只执行一条语句sum=sum+i, 与原意不符。应改为: while (i<=100) { sum=sum+i; i++; }
相关主题