C语言常见错误分析: 错误分类 逻辑错 运行错 1.C语言的变量一定要先定义才能使用; 2.输入输出的数据的类型与所用格式说明符不一致 它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出) 3.未注意int型数据的数值范围 4.输入变量时忘记使用地址符 5.输入时数据的组织与要求不符 6.误把”=“作为”等于”比较符 8.不该加分号的地方加了分号 for(i=0;i<10;i++); 9.对应该有花括弧的复合语句,忘记加花括弧 11.在用标识时,忘记了大写字母和小写字母的区别 13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值 14.对二维或多维数组的定义和引用的方法不对 15.误以为数组名代表数组中全部元素 { 18.switch语句的各分支中漏写 break语句 19.使用自加(++)和自减(--)运算符时出的错误 注意于*(++p)的区别; 20.所调用的函数在调用语句之后才定义,而又在调用前未加说明 21.误认为形参值的改变会影响实参的值 22.函数的实参和形参类型不一致 23.不同类的型指针混用 24.没有注意函数参数的求值顺序 25.混淆数组名与指针变量的区别 {int a[5],*p; 26.混淆结构体类型与结构体变量的区别 27.使用文件时忘记打开,用只读方式打开,却企图向该文件输出数据
语法错
0.忘记定义变量:
main()
{x=3;y=6;
printf(“%d/n”,x+y);
int a=3;float b=4.5;printf(“%f%d/n”,a,b);
int型数据的数值范围(-32768~32768)
int num=89101;
printf(“%d”,num);
会将超过低16位的数截去从而得到23563
注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
scanf(“%d%d”,a,b);
对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
“=“为附值运算符
“==“为比较运算符
7.语句后面漏分号
{
t=a;
a=b;
b=t
}
它是pascal的语法
if(a>b);
printf(“a is larger than b/n”);
{
scanf(“%d”,&x);
printf(“%d/n”,x*x);
}
sum=0;
i=1;
while(i<=100)
sum=sum+1;
i++;
10.括弧不配对
while((c=getchar()!=‘#’)
putchar(c);
{
int a,b,c;
a=2;
b=3;
C=A+B;
printf(“%d+%d=%D”,A,B,C);
}
12.引用数组元素时误用发圆括弧
{
int i,a(10);
for(i=0;i<10;i++)
scanf(“%d”,&a(i));
}
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i=1;i<=10;i++)
printf(“%d”,a[i]);
}
{
int a[5,4];
…
printf(“%d”,a[1+2,2+2]);
…
}
{int a[4]={1,2,3,4};
printf(“%d%d%d%d”,a);
}
16.混淆字符数组与字符指针的区别
main()
{
char str[40];
str=“Computer and c”;
printf(“%s/n”,str);
}
17.在引用指针变量之前没有对它赋予确定的值
{
char *p;
scanf(“%s”,p);
}
char *p,c[20];
p=c;
scanf(“%s”,p);
}
混淆字符和字符串的表示形式
…
char sex;
sex=“M”;
…
{
int *p,a[5]={1,3,5,7,9};
p=a;
printf(“%d”,*p++);
}
main()
{float x,y,z;
x=3.5;y=-7.6;
z=max(x,y);
printf(“%f”,z);
}
float max(float x,float y)
{
return (x>y?x:y);
}
swap(int x,int y)
{int t;
t=x;x=y;y=t;
}
main()
{int a,b;
a=3;b=4;
swap(a,b);
printf(“%d,%d/n”,a,b);
}
fun(float x,float y)
main()
{
int a=3,b=4;
c=fun(a,b);
…
}
{
int i=3,*p1;
float a=1.5,*p2;
p1=&i;p2=&a;
p2=p1;
printf(“%d,%d/n”,*p1,*p2);
}
int i=3;
prinft(“%d,%d,%d/n”,i,++i,++i);
结果为5,5,4
因为VC++是采取自右至左的顺序求函数的值
C标准没有具体规定函数参数求值的顺序
{ int i,a[5];
for(i=0;i<5;i++)
scanf(“%d”,a++);
}
p=a;
for(int i=0;i<5;i++)
scanf(“%d”,p++)
}
{int a[5],*p;
for(p=a;p<a+5;p++)
scanf(“%d”,p);
}
struct worker
{long int num;
char name[20];
char sex;
int age;
};
worker.num=187045;
strcpy(worker.name,”ZhangFun”);
worker.sex=‘M’;
worker.age=18;
if(fp=fopen(“test”,”r”))==NULL)
{printf(“cannot open this file/n”);
exit(0);
}
ch=fgetc(fp);
while(ch!=‘#’)
{ch=ch+4;
fputc(ch,fp);
ch=fgetc(fp);
}
C语言常见错误分析:
错误分类
语法错
逻辑错
运行错
0.忘记定义变量:
main()
{x=3;y=6;
printf(“%d/n”,x+y);
1.C语言的变量一定要先定义才能使用;
2.输入输出的数据的类型与所用格式说明符不一致
int a=3;float b=4.5;printf(“%f%d/n”,a,b);
它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)
3.未注意int型数据的数值范围
int型数据的数值范围(-32768~32768)
int num=89101;
printf(“%d”,num);
会将超过低16位的数截去从而得到23563
注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
4.输入变量时忘记使用地址符
scanf(“%d%d”,a,b);
5.输入时数据的组织与要求不符
对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
6.误把”=“作为”等于”比较符
“=“为附值运算符
“==“为比较运算符
7.语句后面漏分号
{
t=a;
a=b;
b=t
}
它是pascal的语法
8.不该加分号的地方加了分号
if(a>b);
printf(“a is larger than b/n”);
for(i=0;i<10;i++);
{
scanf(“%d”,&x);
printf(“%d/n”,x*x);
}
9.对应该有花括弧的复合语句,忘记加花括弧
sum=0;
i=1;
while(i<=100)
sum=sum+1;
i++;
10.括弧不配对
while((c=getchar()!=‘#’)
putchar(c);
11.在用标识时,忘记了大写字母和小写字母的区别
{
int a,b,c;
a=2;
b=3;
C=A+B;
printf(“%d+%d=%D”,A,B,C);
}
12.引用数组元素时误用发圆括弧
{
int i,a(10);
for(i=0;i<10;i++)
scanf(“%d”,&a(i));
}
13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i=1;i<=10;i++)
printf(“%d”,a[i]);
}
14.对二维或多维数组的定义和引用的方法不对
{
int a[5,4];
…
printf(“%d”,a[1+2,2+2]);
…
}
15.误以为数组名代表数组中全部元素
{int a[4]={1,2,3,4};
printf(“%d%d%d%d”,a);
}
16.混淆字符数组与字符指针的区别
main()
{
char str[40];
str=“Computer and c”;
printf(“%s/n”,str);
}
17.在引用指针变量之前没有对它赋予确定的值
{
char *p;
scanf(“%s”,p);
}
{
char *p,c[20];
p=c;
scanf(“%s”,p);
}
18.switch语句的各分支中漏写 break语句
混淆字符和字符串的表示形式
…
char sex;
sex=“M”;
…
19.使用自加(++)和自减(--)运算符时出的错误
{
int *p,a[5]={1,3,5,7,9};
p=a;
printf(“%d”,*p++);
}
注意于*(++p)的区别;
20.所调用的函数在调用语句之后才定义,而又在调用前未加说明
main()
{float x,y,z;
x=3.5;y=-7.6;
z=max(x,y);
printf(“%f”,z);
}
float max(float x,float y)
{
return (x>y?x:y);
}
21.误认为形参值的改变会影响实参的值
swap(int x,int y)
{int t;
t=x;x=y;y=t;
}
main()
{int a,b;
a=3;b=4;
swap(a,b);
printf(“%d,%d/n”,a,b);
}
22.函数的实参和形参类型不一致
fun(float x,float y)
main()
{
int a=3,b=4;
c=fun(a,b);
…
}
23.不同类的型指针混用
{
int i=3,*p1;
float a=1.5,*p2;
p1=&i;p2=&a;
p2=p1;
printf(“%d,%d/n”,*p1,*p2);
}
24.没有注意函数参数的求值顺序
int i=3;
prinft(“%d,%d,%d/n”,i,++i,++i);
结果为5,5,4
因为VC++是采取自右至左的顺序求函数的值
C标准没有具体规定函数参数求值的顺序
25.混淆数组名与指针变量的区别
{ int i,a[5];
for(i=0;i<5;i++)
scanf(“%d”,a++);
}
{int a[5],*p;
p=a;
for(int i=0;i<5;i++)
scanf(“%d”,p++)
}
{int a[5],*p;
for(p=a;p<a+5;p++)
scanf(“%d”,p);
}
26.混淆结构体类型与结构体变量的区别
struct worker
{long int num;
char name[20];
char sex;
int age;
};
worker.num=187045;
strcpy(worker.name,”ZhangFun”);
worker.sex=‘M’;
worker.age=18;
27.使用文件时忘记打开,用只读方式打开,却企图向该文件输出数据
if(fp=fopen(“test”,”r”))==NULL)
{printf(“cannot open this file/n”);
exit(0);
}
ch=fgetc(fp);
while(ch!=‘#’)
{ch=ch+4;
fputc(ch,fp);
ch=fgetc(fp);
}
C语言常见错误分析:
错误分类
语法错
逻辑错
运行错
0.忘记定义变量:
main()
{x=3;y=6;
printf(“%d/n”,x+y);
1.C语言的变量一定要先定义才能使用;
2.输入输出的数据的类型与所用格式说明符不一致
int a=3;float b=4.5;printf(“%f%d/n”,a,b);
它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)
3.未注意int型数据的数值范围
int型数据的数值范围(-32768~32768)
int num=89101;
printf(“%d”,num);
会将超过低16位的数截去从而得到23563
注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
4.输入变量时忘记使用地址符
scanf(“%d%d”,a,b);
5.输入时数据的组织与要求不符
对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
6.误把”=“作为”等于”比较符
“=“为附值运算符
“==“为比较运算符
7.语句后面漏分号
{
t=a;
a=b;
b=t
}
它是pascal的语法
8.不该加分号的地方加了分号
if(a>b);
printf(“a is larger than b/n”);
for(i=0;i<10;i++);
{
scanf(“%d”,&x);
printf(“%d/n”,x*x);
}
9.对应该有花括弧的复合语句,忘记加花括弧
sum=0;
i=1;
while(i<=100)
sum=sum+1;
i++;
10.括弧不配对
while((c=getchar()!=‘#’)
putchar(c);
11.在用标识时,忘记了大写字母和小写字母的区别
{
int a,b,c;
a=2;
b=3;
C=A+B;
printf(“%d+%d=%D”,A,B,C);
}
12.引用数组元素时误用发圆括弧
{
int i,a(10);
for(i=0;i<10;i++)
scanf(“%d”,&a(i));
}
13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i=1;i<=10;i++)
printf(“%d”,a[i]);
}
14.对二维或多维数组的定义和引用的方法不对
{
int a[5,4];
…
printf(“%d”,a[1+2,2+2]);
…
}
15.误以为数组名代表数组中全部元素
{int a[4]={1,2,3,4};
printf(“%d%d%d%d”,a);
}
16.混淆字符数组与字符指针的区别
main()
{
char str[40];
str=“Computer and c”;
printf(“%s/n”,str);
}
17.在引用指针变量之前没有对它赋予确定的值
{
char *p;
scanf(“%s”,p);
}
{
char *p,c[20];
p=c;
scanf(“%s”,p);
}
18.switch语句的各分支中漏写 break语句
混淆字符和字符串的表示形式
…
char sex;
sex=“M”;
…
19.使用自加(++)和自减(--)运算符时出的错误
{
int *p,a[5]={1,3,5,7,9};
p=a;
printf(“%d”,*p++);
}
注意于*(++p)的区别;
20.所调用的函数在调用语句之后才定义,而又在调用前未加说明
main()
{float x,y,z;
x=3.5;y=-7.6;
z=max(x,y);
printf(“%f”,z);
}
float max(float x,float y)
{
return (x>y?x:y);
}
21.误认为形参值的改变会影响实参的值
swap(int x,int y)
{int t;
t=x;x=y;y=t;
}
main()
{int a,b;
a=3;b=4;
swap(a,b);
printf(“%d,%d/n”,a,b);
}
22.函数的实参和形参类型不一致
fun(float x,float y)
main()
{
int a=3,b=4;
c=fun(a,b);
…
}
23.不同类的型指针混用
{
int i=3,*p1;
float a=1.5,*p2;
p1=&i;p2=&a;
p2=p1;
printf(“%d,%d/n”,*p1,*p2);
}
24.没有注意函数参数的求值顺序
int i=3;
prinft(“%d,%d,%d/n”,i,++i,++i);
结果为5,5,4
因为VC++是采取自右至左的顺序求函数的值
C标准没有具体规定函数参数求值的顺序
25.混淆数组名与指针变量的区别
{ int i,a[5];
for(i=0;i<5;i++)
scanf(“%d”,a++);
}
{int a[5],*p;
p=a;
for(int i=0;i<5;i++)
scanf(“%d”,p++)
}
{int a[5],*p;
for(p=a;p<a+5;p++)
scanf(“%d”,p);
}
26.混淆结构体类型与结构体变量的区别
struct worker
{long int num;
char name[20];
char sex;
int age;
};
worker.num=187045;
strcpy(worker.name,”ZhangFun”);
worker.sex=‘M’;
worker.age=18;
27.使用文件时忘记打开,用只读方式打开,却企图向该文件输出数据
if(fp=fopen(“test”,”r”))==NULL)
{printf(“cannot open this file/n”);
exit(0);
}
ch=fgetc(fp);
while(ch!=‘#’)
{ch=ch+4;
fputc(ch,fp);
ch=fgetc(fp);
}
本文主要对C语言常见错误进行分析,包括语法错、逻辑错和运行错。详细列举了如忘记定义变量、输入输出格式不符、未注意数据范围等27种常见错误,并给出示例,还提到了VC++函数参数求值顺序等相关内容。
836

被折叠的 条评论
为什么被折叠?



