初试C++犯的超级低级错误

小白最近在学习C++,理解了基本语法后,开始对书本中的例题和试题进行上机练习,在上机过程中,发现自己犯了越来越多的令人吐血的超级低级错误,先备案在此,再犯每天多练10道上机题,累死你!

1. 忘掉载入标准库:using namespace std;

2014-04-25 小白今天花了一个多小时在修复一个bug,一直没有修复成功,直到阴差阳差的把之前的代码揪出来对照了一下,才出现小白居然又少写了“using namespace std;”,这个问题已造成小白推翻了好多定理,比如说:microsoft的visual studio 2008原来是这么挫,连string类型的都没办法定义!相关的atoi,c_str()函数都用不了,谨以记载,一切大问题追根溯源都是令人面红耳赤的小失误!

2. 声明变量后,忘记初始化就开始进行运算;

2014.04.27今天犯了两次这个错误,花了大概2个小时才查找出原因,尼玛,姐姐怒了!!

3. 将main声明为int型,但是在main函数里最后却没有return 0;

4. 居然在代码中写出(b*b-4ac)这种悲剧,应该是(b*b-4*a*c),高估计算语言的智能性!

5. 无数次在语句的后面忘掉分号;

6. exit 0编译系统不认可,exit (0)才可以编译通过。

7. for(i=0;i<=11;i++)这个循环语句执行完之后,i的值为12,不为11。

8. 写代码时经常忽略掉对异样场景的处理,比如对输入范围,特殊字符的检查,这显示了我这个菜鸟在c++发展上的局限和狭隘,若不改正,未来必为此受重创!

9. 在代码中不要留只定义但没有用到的变量,否则会报错:'min1' : unreferenced local variable(min1只定义了,但代码中却没没有使用)

10. 循环语句中注意循环的次数,尤其确保第一次执行相关参数值和流程以及最后一次执行的相关参数和流程。如:int  i=1; while(i<=2){cout<<"ni hao"<<i<<endl;i++}会执行两次而不是一次!

11. 居然在代码中定义了同样名称的变量名和函数名,例如:int max 和 int max(int a,int b),掩面而去~·

12. 内置函数的声明不能在main函数里,应该在main函数外。

13. 居然命名了一个2_max的变量,导致编译不通过!(c/C++中的变量必须以字母或者下划线开头,变量允许有字母,数字,下划线)

14. 当x等于1时,y=2;使用if语句进行条件判断时,不是if (x=1),而是if(x==1),赋值符号=和算术表达式==要区分开来!

2014.04.21补充:==和=这两个符号这两天没把姐姐搞死,懒得记忆了,故定下:用到==时,将值放置在左边,例如5==i,再错就不得了!

15. 对数组进行初始化时,不能将定义和赋值分开,如int b[10]; b[10]={1,2};必须将定义和赋值一个语句完成:int b[10]={1,2};

16. 声明一个二维数组时,必须写出它的列数,否则编译不通过。例如:int max(array[ ] [ ]), max(array [ 3] [ ]),max(array [ ] [4] )中,只有max(array [ ] [4] )是编译通过的!

17. 初始化字符数组:char a[ ] [ 2 ]={ { ' ' , ' * '} , {' ' ,' '} },报错:error C2137: empty character constant,解决方案:char a[ ] [ 2 ]={ { '\0 ' , ' * '} , {'\0 ' ,' \0'} 就可以了,字符初始化,想要初始化为空字符,不能是' ',加上\0,变成' \0 '就可以了。

18. 全局变量在使用过程中,只要在程序执行过程中改变了它的值,那么它每一瞬的值就需要仔细分析,尤其是和循环语句结合使用的时候。

19. 在代码中不写注释,导致回头查看代码的时候,自己都不认识自己的代码到底是用于什么功能。

20. 对字符串的赋值不能用赋值号(除非是string类型),否则必须使用字符串处理函数strcpy,同时区分字符是不需要如此麻烦的,直接赋值即可。

21. 在visual c++编译器中对于二维字符数组的初始化(如:char name[ 3 ] [ 30 ])不能使用cin>>a [ i ] ,但可以使用 gets(a [ i ] )。

22. 在主函数main中最后一行return 0;之前经常忽略掉一句话:cout<<endl;导致调试时运行的结果经常会胡子连着辫子般的“5press any key to continue”

23. 在字符的二维数组里如:a[ 3 ] [ 5 ]表示有3行,每一行有5个元素,但是每一行的默认最后一个元素为' \ 0 ',而' \ 0 '也是算计在5个元素之内的,故字符数组a[ 3 ] [ 5 ]每行实际有效的字符只有4个。

24. 定义一个引用时,在定义阶段就必须初始化,如:int &b=a;不能分两个阶段如:int b; &b=a;

25. 对于一定功能的代码里的for(表达式1; 表达式2 ; 表达式3)中的每一个表达式的大小,范围,极限值,逻辑性,变量名都需要确认无误,减少调试时的各种粗心的,逻辑上的错误。

26. 小白今天又定义了一个函数名叫function,呃。。。蛇精病犯了~

27. 这几天总是会犯在for ( i=0; j<5 ; i++ )这样会导致死循环的致命细节错误!

28. 定义一个char *p; sting a=" xiao bai ";想要p指向字符串,应该是 p=&a [ 0 ] ; 这个很容易在传参数的时候出错。

29. 定义一个int *p,又定义个a [ 5 ] [ 5 ],想要p指向二维数组,应该是p=& a [ 0 ] [ 0 ];

30. 定义完一个结构体之后不能少分号;,否则编译时会有一大堆错误。struct Date { int month; int year; int day};

31. do {xxx} while() ;语句的最后有一个分号!

32. 创建链表时,p->next是个NULL,然后小白很神经的写了个:cout<<p->next<<endl; 然后程序就挂了!

33. 小白写了一个类,依据题目要求,类的声明(。h文件)和类的定义(cpp文件)和类的使用(main函数)在三个不同的文件,小白在编译时发现,所有h文件和cpp文件里,都必须将此文件涉及到的头文件包括进来(例如:iostream 或者 string)还有using namespace std,且在每个文件里需要#include "  student.h ",注意不能使用#include<student.h>,不然编译会报:Cannot open include file: 'student.h': No such file or directory 因为<>代表在系统头文件的目录里,而“ ”代表在当前目录下!

34. 在一个类中,若有一个以上的成员函数,那么这些成员函数体里的变量是局部变量,不能相互调用!

35. 在定义类的成员函数时,若是在类体外定义,总是少类名,比如:void set_time() ,其实应该是void Time::set_time(); !

36. 在cout<<stu[2].total()<<endl; 发现报错,回头才发现类的成员函数total()被小白定义成:voidStudent : : total ( ) ~有种自己作死自己的赶脚~

37. 定义类时,居然忘了将参数初始化的构造函数的编写!

38. 居然在main函数中又定义了一个函数,然后调用,这是抽风了!

39. 小白的这个问题已经不知道犯了多少次,总是区分不开bool类型中true是0还是1,总是将c++和shell混淆,现歃帖为誓,bool中的true为1,false为0,这种现象跟shell中命令返回值是完全相反的。

41. 在多成派生中,小白调用基类的display()函数时,居然用void display()方式,怪不得输出结果总是少那么几个,调用形式display()这样就可以了~

42. Student是一个类名,stu是Student类的对象,Student *p=&stu 而不是Student *p=stu,小白将数组,函数名称即为首地址套在这里,是极大的错误。

43. 声明了一个虚基类shape,其中:virtual float area() const { return 0.0; } 但是小白在派生类中重新定义area()时却错误地写成: float area(), 这里会导致shape *p指针指向派生类对象时,p-> area()会直接为派生类的默认构造函数参数形成的area结果,一般是:c(0,0,0)中参数构成的area()计算结果,而不是派生类对象定义时原本的:如c(1,2,3)的结果.

2014-07-14

44. 时隔3个月的小白再看写的这篇错误小结,很有成就感的同时,倍感自己有些方面描述不清,回头看时不能把握住当时的自己在什么情景下发生的什么的错误,事实上应该是什么样,而且为什么会发生这样的错误,围绕着这几个问题,这个小结还有很多不足之处,现记录一下,3个月后的小白看此小结纠结的心情。

45. 在敲代码的过程中,小白把意义不同的变量张冠李戴,结果,程序出现奔溃,小白在一个偌大的for循环里寻寻觅觅,不停的debug,一步一步的查看结果,怀疑自己写的每一个函数,当症结找到的时候,捅死自己的心情都有,故立帖为誓,关于变量出现的地方要着重的注意。(之前犯的定义变量不初始化,现在已经基本改正,这是一个好现象,好记性不如烂键盘)~

45. 在main()定义了一个flag的变量,然后小白居然脑抽的想要在其他函数中使用flag的当前值,迷糊了两个概念:1. main()函数也是函数,里面的变量的作用域不做特殊说明只能是main函数体中 2. 若想要在一个函数中使用另一个函数处理过的变量,可以将这个变量(如flag)设定为全局变量,全局变量的设定是在所有函数体之外。

46. 小白在2014-07-16 23:27 愤怒的看着以前写的代码,本想借着代码好好重温一下基础知识,怎奈一个cpp文件打开无功能介绍,无变量说明,无注释,只能浅浅的瞥一下代码,当初我写他们的时候,几乎每一个cpp都有错误,现在看着完好的一片,我无法肯定下次我不会犯当时的错误,或者我现在的思路会比得上之前的,总之,对于代码的阅读性,小白必须改正,一个自己都不愿意好好看的代码有什么前途!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值