【真正汇总】C语言陷阱:破解新手遇到的大陷阱 #2017.9.16

  • 2017-09-16
  • 571
  • 1
  • 0

第一条:

首先讲的就是scanf了,有同学老是喜欢这样写:
int a;
scanf(“%d”,a);
要是我下次再看到这样的东西。。。
应该是scanf(“%d”,&a);//取地址符千万不能少!

另外又有同学:scanf(” %d”,a);看出来了吗?前面还多个空格,会吞回车。


第二条:

新手容易饭的错误:
1.忘记在应该打分号的地方打分号
2.在不应该打分号的时候又打了分号(函数后面没有分号)


第三条:

关于变量的定义和命名

首先,变量必须是定义了才能使用,这点大家都知道但关于变量命名的地方就有问题了。
首先在经典C(K&R C)和ANSI/ISO C1990标准(以下简称C90)中变量只被允许在代码块的开头或程序开头被声明,也就是说函数中变量声明之前不能有任何语句

但在ANSI/ISO C1999标准(以下简称C99)中,为了与C++更好兼容,变量可以在程序块任意地方声明(所以说为了方便大家要及时更新编译器啊= =)   不过要注意变量的作用域哦~


第四条:

变量声明记得要赋值,全局变量(也就是在所有函数外声明的变量)作用域是全局,所有函数都可以调用,这些变量都是赋值初始值0了的,

但是,在函数中声明的变量(自动变量)它们在声明时没有赋值,这时它们的值是内存中随机的一个值,为了避免出篓子最好还是像指针声明那样分配一个你知道的确切值比较好……(要不然你可能找半天都不知道问题在哪里orz)


第五条:

关于命名的问题……

每个人都有自己的命名习惯,但变量,函数之类的命名我们有一些规则和约定俗成的东西。

(1).变量必须是以数字,下划线,英文字母组成,不可以是中文(谁叫C是外国人发明的呢= =),开头第一个字符必须是字母,并且C对大小写敏感,也就是说cpp和CPP,Cpp是三个不同的变量。
(2).一些约定俗成的东西

a.变量名最好要有意义或使用注释比如说用来表示数num绝对比a要易懂的多,对于一些变量你可以加注释如
leaf_mape_num /*我家叶子的数量*/
如果你不加注释谁知道这是什么东西啊!
b.常量第一个字母最好大写或全部大写,cpp理解为变量,Cpp和CPP理解为常量。
c.不要取太像的名字或杂乱无章的名字如leaf和1eaf(1与l)LOG与L0G(0与O)或llllllll和lllllllllll(数不清并且看不懂啊!)
(这些约定俗成的东西虽然不是规则却可以让你的代码更好辨识,编写和debug,总的来说遵守还是有好处……)


第六条:

if 的条件里:
曾经有人写1<x<5,这是错误的,这不是数学,要用&&,

老师也没有发现我的错误,我也是后来自己发现的问题。

(点击图片查看大图)

    


第七条:别把中文符号和英文符号弄混了!


第八条关键字一定要小写


第九条:

死循环:
我也把自己抱一下光,我也这样写过:
while()
应该是while(1==1)之类的里面有恒等的式子。
最简单的这样写:while(1)或者for(;;)

注意:
写循环的时候要仔细检查,要是弄成了死循环就完蛋了,尤其是手机,c4都会卡掉的。
这时你原来没有保存的代码会消失,你会急死,叫你一个办法:(仅限手机c4)
打开c4,点“打开”,默认路径是sd卡,点“…”返回到手机储存,进入data文件夹,再进data文件夹,这时你会发现里面有一个com开头的文件夹,而且名字里还有c4droid什么的,)com.什么什么什么,这时app的包名,data文件夹存着所有app的数据),打开后会发现很多文件夹,打开file,然后你上一次运行的文件就是temp.c,好了,找回来了,打开,另存为吧。
注:我不知道没有root的手机能不能显示data文件夹下的文件,反正最好要root,没root的手机可以先试试,不行再说


第十条:还是循环,for循环语句中间的分隔符是分号。但也有一种分隔符是逗号,它表示并列。


第十一条:do…while;的最后有分号!!!!一定要注意!!!!


第十二条:

关于数组,数组的第一个元素的下标是0,不是1!

也就是说你定义了一个数组a[x],那么它的第一个元素是a[0],最后一个元素是a[x-1],不是a[x],遍历和使用数组的时候一定要注意,由于数组也是指针的一种,所以这种错误的操作很容易引起编译器无法查出的错误,轻则数据丢失,重则影响同一内存空间运行的其他程序。

(这里提一下,c里面数组实际上就是指针的一种,数组名就是指向第一个元素的指针,所以说数组可以当做指针来操作,指针也可以使用下标,但注意,数组虽然是指针的一种但绝对不能把它指向其他地方!)


第十三条:函数的参数一个都不能少!


第十四条:结构、联合,包括c++中的类的声明结尾也有分号!


第十五条:struct结构体声明的大括号的结尾有一个分号,别漏了


第十六条:

别被本来就不存在的指针给骗了!不能把值直接复给指针!指针要分配内存才能用哦!
解释:
因为在声明指针时,系统并没有给指针分配储存单元。


第十七条:

指针在用malloc,一定要在程序结尾之前使用free,不然你看着办吧!(卡爆电脑,ILIKE)


第十八条:

在打开文件的时候不要强制退出,不然你调用的文件会消失(内容消失),注意!
(如果在我叫斗斗游戏中遇到这个情况导致存档消失,在本楼回复跟楼主讲,因为存档消失会导致打怪的时候会出问题!)


 

评论

  • 车风回复
    Google Chrome 55 Google Chrome 55 Windows 10 Windows 10

    C语言太难了,我只学了点皮毛就丢了。

发表评论