• 0816学习笔记(常见错误分析)


    1、忘记定义变量(会报错)

    1. #include
    2. int main()
    3. {
    4. int c;
    5. c=x+y;
    6. printf("%d",c);
    7. return 0;
    8. }

    2、输入输出类型不一致(不报错,最多会警告)

    1. #include
    2. int main()
    3. {
    4. int c;
    5. c=6+3;
    6. printf("%f",c);
    7. return 0;
    8. }

    结果是0.000000

    3、超出数据范围

    1. #include
    2. int main()
    3. {
    4. int c;
    5. c=20000000000;
    6. printf("%d",c);
    7. return 0;
    8. }

    结果

    1. -1474836480
    2. --------------------------------
    3. Process exited after 0.4559 seconds with return value 0
    4. 请按任意键继续. . .

    4、使用scanf忘记符号&或多用(不报错)

    1. #include
    2. int main()
    3. {
    4. int c;
    5. scanf("%d",c);
    6. printf("%d",c);
    7. int *p=&c;
    8. scanf("%d",&p);
    9. printf("%d",*p);
    10. return 0;
    11. }

    结果

    1. 45
    2. --------------------------------
    3. Process exited after 2.355 seconds with return value 3221225477
    4. 请按任意键继续. . .

    5、scanf输入形式与要求不符

    1. #include
    2. int main()
    3. {
    4. int c,b;
    5. scanf("%d%d",&c,&b);
    6. printf("%d%d",c,b);
    7. return 0;
    8. }

    结果

    1. 2,3
    2. 21
    3. --------------------------------
    4. Process exited after 3.381 seconds with return value 0
    5. 请按任意键继续. . .

    6、scanf向数组输入

    1. #include
    2. int main()
    3. {
    4. char arr[20];
    5. scanf("%s",&arr);//不需要取地址,多余
    6. puts(arr);
    7. int arr_1[20];
    8. scanf("%d",arr_1);//数值赋值只能循环单个赋值
    9. return 0;
    10. }

    7、预处理指令当c语句处理,后面加“;”

    #include ;

    8、不该加“;”的地方加了“;”

    1. #include
    2. int main()
    3. {
    4. int arr_1[20];
    5. int i;
    6. for(i=0;i<5;i++);
    7. {
    8. scanf("%d",&arr_1[i]);//数值赋值只能循环单个赋值
    9. }
    10. if(arr_1[2]>0);
    11. {
    12. printf("%d",arr_1[2]);
    13. }
    14. switch(i);
    15. {
    16. ...;
    17. }
    18. return 0;
    19. }

    9、漏掉{}

    1. #include
    2. int main()
    3. {
    4. int arr_1[20];
    5. int i;
    6. for(i=0;i<5;i++);
    7. {
    8. scanf("%d",&arr_1[i]);//数值赋值只能循环单个赋值
    9. }
    10. if(arr_1[2]>0);
    11. {
    12. printf("%d",arr_1[2]);
    13. switch(i);
    14. {
    15. ...;
    16. }
    17. return 0;
    18. }

    10、()不配对

    1. while((c=getchar()==0)
    2. {
    3. ...;
    4. }

    11、标识符大小写混用(会报错)

    1. #include
    2. int main()
    3. {
    4. int arr_1[20];
    5. int i;
    6. for(I=0;I<5;I++)
    7. {
    8. scanf("%d",&arr_1[I]);//数值赋值只能循环单个赋值
    9. }
    10. return 0;
    11. }

    12、赋值(=)和相等(==)混用

    1. if(arr_1[2]=1)
    2. {
    3. ...;
    4. }

    13、使用数组时,使用下标为定义的最大下标

    1. #include
    2. int main()
    3. {
    4. int arr_1[20];
    5. int i;
    6. for(i=0;i<5;i++)
    7. {
    8. scanf("%d",&arr_1[i]);//数值赋值只能循环单个赋值
    9. }
    10. printf("%d",arr_1[20]);//越界
    11. return 0;
    12. }

    14、误认为数组名代表数组的所有元素

    1. #include
    2. int main()
    3. {
    4. int arr_1[20];
    5. int i;
    6. for(i=0;i<5;i++)
    7. {
    8. scanf("%d",&arr_1[i]);//数值赋值只能循环单个赋值
    9. }
    10. printf("%d",arr_1[20]);//越界
    11. int b[20];
    12. b=arr_1;//错误
    13. return 0;
    14. }

    15、混淆字符数组和字符指针(会报错)

    1. #include
    2. int main()
    3. {
    4. char a[]="shanshanerchuan";
    5. a="buyaneryu";//错误
    6. char *b="wohewodezuguo";
    7. b="woshibushinizuitengaideren"; //可以
    8. return 0;
    9. }

    16、引用指针变量前未指向

    1. #include
    2. int main()
    3. {
    4. int *p;
    5. scanf("%d",p);
    6. return 0;
    7. }

    17、switch语句忘记break

    1. #include
    2. int main()
    3. {
    4. int p;
    5. scanf("%d",&p);
    6. switch(p)
    7. {
    8. case 1:
    9. ...;
    10. case 2:
    11. ...;
    12. }
    13. return 0;
    14. }

    18、混淆字符和字符串

    1. #include
    2. int main()
    3. {
    4. 'a';//字符
    5. 'abc';//错误
    6. "a";//字符串
    7. "abc";//字符串
    8. return 0;
    9. }

    19、使用自加(++)自减(--)容易错误

    1. #include
    2. int main()
    3. {
    4. int a=10;
    5. a++;
    6. printf("%d",a++);//a=11而不是12
    7. return 0;
    8. }

    20、忘记对函数声明

    1. #include
    2. int main()
    3. {
    4. int a=10;
    5. a++;
    6. fun(a);
    7. return 0;
    8. }
    9. void fun(int a)
    10. {
    11. printf("%d",a);
    12. }

    21、函数声明与函数定义不匹配

    1. #include
    2. int fun(int a);
    3. int main()
    4. {
    5. int a=10;
    6. a++;
    7. fun(a);
    8. return 0;
    9. }
    10. void fun(float a)
    11. {
    12. printf("%d",a);
    13. }

    22、函数的实参和形参类型不一致

    1. #include
    2. void fun(float a);
    3. int main()
    4. {
    5. int a=10;
    6. a++;
    7. fun(a);
    8. return 0;
    9. }
    10. void fun(float a)
    11. {
    12. printf("%d",a);
    13. }

    23、不同类型指针混用

    1. #include
    2. int main()
    3. {
    4. int *p,i=500;
    5. char *s,a=10;
    6. p=&a;
    7. s=&i;
    8. printf("%d %d",*p,*s);
    9. return 0;
    10. }

    结果

    1. 128010 -12
    2. --------------------------------
    3. Process exited after 0.3635 seconds with return value 0
    4. 请按任意键继续. . .

    24、系统对函数参数的求值方法

    1. #include
    2. void fun(int a,int b,int c)
    3. {
    4. printf("%d %d %d",a,b,c);
    5. }
    6. int main()
    7. {
    8. int i=500;
    9. char a=10;
    10. fun(i,i++,++i);
    11. return 0;
    12. }

    结果

    1. 502 501 502
    2. --------------------------------
    3. Process exited after 0.4191 seconds with return value 0
    4. 请按任意键继续. . .

    25、混用数组名和指针变量

    1. #include
    2. int main()
    3. {
    4. int a[20];
    5. int i;
    6. int *p=a;
    7. for(i=0;i<20;i++)
    8. {
    9. scanf("%d",a++);
    10. }
    11. for(i=0;i<20;i++)
    12. {
    13. scanf("%d",p++);
    14. }
    15. return 0;
    16. }

    26、混用结构体类型与结构体变量的区别

    1. struct node
    2. {
    3. char name[20];
    4. }s;

     struct nade 是结构体类姓名  

    s 是结构体变量

    27、混用结构体普通变量和结构体指针变量引用的区别

    1. struct node
    2. {
    3. char name[20];
    4. }s;
    5. s.name // 结构变量访问成员的方式
    6. s->name //这样是错误的
    7. struct node * p;
    8. p->name // 结构体指针访问结构体成员的方式
    9. (*p).name // 当然这样也可以 一般人不这样用

    28、使用文件时忘记打开,或打开方式与使用情况不匹配

    1. #include
    2. int main()
    3. {
    4. FILE *fp=NULL;
    5. if((fp=fopen("D:\zhaozhuang\练习\0816\test.txt","w")==NULL))
    6. {
    7. printf("文件不存在。");
    8. }
    9. else
    10. {
    11. char ch;
    12. ch=fgetc(fp);
    13. }
    14. return 0;
    15. }

    29、打开文件时,找不到指定文件

    1. #include
    2. int main()
    3. {
    4. FILE *fp=NULL;
    5. if((fp=fopen("D:\zhaozhuang\练习\08222","R")==NULL))
    6. {
    7. printf("文件不存在。");
    8. }
    9. return 0;
    10. }

    30、忘记关闭文件,虽然程序结束后会关闭文件,但可能丢失数据

     

    1. #include
    2. #include
    3. int main()
    4. {
    5. FILE *fp=NULL;
    6. fp=fopen("test.txt","w");
    7. fwrite("山有木兮木有枝",1,16,fp);
    8. return 0;
    9. }

  • 相关阅读:
    Spring SPI
    Pytorch学习 day04(Totensor、Normalize、Resize、Compose)
    基于Nodejs的知识信息分享平台的设计和实现
    Excel 数据透视表教程大全之 04 按日期分组(教程含样本数据)
    jdbc快速开始
    小微风控中客群分类和授信策略
    java11中String类,StringBuffer类和StringBuilder类区别
    通过修改源码解决低内存杀死自己app的解决方案
    WebGL、canvas、svg
    Python+selenium自动化生成测试报告
  • 原文地址:https://blog.csdn.net/m0_72070804/article/details/126359071