• 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); 
    }

    吾屋无污,吴捂屋污,诬吾污屋,吾晤吴污,吾无物污,吴侮污吾,吾忤吴屋,悟吴诬吾,污屋吴污,吴侮吾污,吾勿武侮,吾唔吴误,诬侮污吾,吾屋悟忤.
  • 相关阅读:
    web----VLAN
    安装 Android Studio 2.3.2
    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
    2017面向对象程序设计(JAVA)第3周学习指导及要求(2017.9.6-2017.9.12)
    第3周教学课件及实验任务已发布!
    关于字符串比较
    优秀博文推荐
    新手如何学习Java——Java学习路线图
    2017面向对象程序设计(Java)第2周学习指导及要求(2017.8.28-2017.9.3)
    第二周教学课件及实验任务已发布!
  • 原文地址:https://www.cnblogs.com/chenxiangxi/p/2195362.html
Copyright © 2020-2023  润新知