C语言常见错误分析(基础细节面试点之一)<转摘>

C语言常见错误分析: 
错误分类 
  语法错 
  逻辑错 
  运行错 
0.忘记定义变量: 
main() 
{x=3;y=6; 
printf(“%d ”,x y); 

1.C语言的变量一定要先定义才能使用; 

2.输入输出的数据的类型和所用格式说明符不一致 
int a=3;float b=4.5;printf(“%f%d ”,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 ”); 

for(i=0;i<10;i ); 

   scanf(“%d”,&x); 
   printf(“%d ”,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); 


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 ”,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 ”,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 ”,*p1,*p2); 


24.没有注意函数参数的求值顺序 
int i=3; 
prinft(“%d,%d,%d ”,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 ”); 
  exit(0); 

ch=fgetc(fp); 
while(ch!=‘#’) 
{ch=ch 4; 
fputc(ch,fp); 
ch=fgetc(fp); 
}

posted on 2011-09-29 12:57  呓语若梦半浮生  阅读(412)  评论(0编辑  收藏  举报

导航