简单聊聊c/c++新手常犯的错误

回顾这几年学习编程有感而写

热身

对很多CS专业的同学来讲,C语言 会是你们接触的首门编程语言。之后可能会进阶难度更大,经过面向对象扩充的C++,或其他什么高级面向对象语言。在这之前,可能你完全是个新手,还没怎么正式接触过编程。作为一名一路走来的老司机,我想跟大家聊聊我当年入门编程时遇到的一些坑,希望我的文章能为你保驾护航,使你免于翻车。

我深知让编程新手们最痛苦的事便是调试代码时被 IDE 高亮提示的满屏错误给闪瞎了眼(多数新手最初的几行代码可能始于独立的编辑器,比如笔者在 Win 上必备的 NotePad++ 等等。还有就是新手们最常犯的一般是语法错误)。这其实很正常,可能你现在连盲打都不熟练,可能你现在只对 WSAD 和 IJKL 这几个按键比较熟练,什么面向过程,面向对象,甚至面向函数等等概念你都还搞不清楚……别着急,后面的路长着呢,长到足够你适应用十根手指敲击所有按键,长到你不会再被语法错误所困扰(因为有更麻烦的逻辑错误在前方等着你,等到被逻辑错误折磨成为常态的那天,你会觉得自己再偶尔犯个语法错误是件很可爱的事~)。

正题

下面我们直接切入正题:
首先本篇文章格局较小,我只以 C语言 为讨论对象聊一些 C语言 新手们常犯的错误(主要是语法错误),后面会涉及一些编程新人们应该具备的基本思想觉悟。另外,本篇文章所讨论的内容十分初级,对编程新人来说可能比较受用,但对老司机可能太过浅薄!不过老司机读这样的文章兴许也能勾起一些早年的学习回忆,希望能博君一笑。下面开始分点讨论:

1. 忘写分号

在 C语言(包括很多 类C语言)里,让很多新手们感觉最反人类的一点大概就是每条语句结尾要以分号 “;” 标示,而对这个超级重要的分号,萌新们初期通常是能忘写就忘写……这样的低级错误单独拿出来说可能显得很滑稽,然而你仔细回想下,你现在或当年确实经常把人家分号给忘掉,对吗?

其实还好,基本上代码写多以后就不存在这样一个低级错误了。初期你可能要先忍受下因为少写了一个分号导致编译不通过的尴尬情况,别着急,回头补上可能编译器就给你通过编译了。说来,这也是最容易排查的一个错误你说是吧。

#include <stdio.h>
void main(){
    printf("Hello World!\n");  //注意分号
}

2. = 和 == 混淆

新手们通常需要一点时间才能理解编程语言中的赋值运算符,敲黑板了!!!注意字符 “=” 在大多数编程语言中是个跟你往常经验有所不同的重要符号,一般被我们称之为“赋值运算符”。这是一个在编程中非常重要的运算符。它具有右结合性,计算的时候是先计算出表达式右边的值,然后再把计算好的右边存储的值赋予左边的变量。计算完成后左右两边其值自然是相等的。注意这个符号的左边只能是变量,因为只有变量才可以被赋值。不要试图把一个常量放在赋值运算符的左边,这会通不过编译的!

“==” 是关系运算符的一种,我们使用这个符号来判断左右两边表达式的值是否相等,其结果是个逻辑值。当然在 C语言 中因为没有提供布尔型数据,所以我们只是简单地用整数 1 来表示 True ,用整数 0 来表示 False。

#include <stdio.h>
void main(){
    //下面三句都是赋值操作
    int a=1;
    int b=2;
    a=b;
    //下面的括号里是使用关系运算符的关系表达式,此处用来比较两个变量的值是否相等,这里是相等的,返回整数 1
    int c=(a==b);
    printf("%d",c);
}

你可能会奇怪我为什么要把这两个基本运算符放一起说道,别急。据我经验,这里也有个新手频繁翻跟头的大坑,那就是容易把这两个运算符搞混。

最常见的一个误操作,就是在进行两个表达式值比较的时候,本来正确的关系表达式应该是 a==b ,然而新生们可能会误写为去判断 a=b ,这……这个错误笔者在今天也会偶尔犯!所以啊,新人们一定要好好跟着两个重要的运算符认识清楚,确保在使用的时候不会混淆,谨记!

3. 注意语言的保留关键字

这个就很容易理解了,新手们普遍敲的代码比较少,注意一些语言的保留关键字一定要敲对了,避免拼写错误。有时候一个键入错误的关键字会报一些难以理解的错误,一定要尽量避免。还有就是变量命名的时候不要使用语言的保留关键字,你懂的!下面贴一下 C语言 的保留关键字,内容来自互联网:

其中,C89中,(C语言标准)中
类型说明保留字:int,long,short,float,double,char,unsigned,signed,const,void,volatile,enum,struct,union
语句定义保留字:if,else,goto,switch,case,do,while,for,continue,break,return,default,typedef
存储类说明保留字:auto,register,extern,static
长度运算符保留字:sizeof

4. 成对符号一定要包住

所谓成对符号,指的是只要出现一定是成对出现的那些符号。比如常见的各种括号,在 C语言 里主要有花括号 {},方括号 [],圆弧括号 (),这三个最为常见。其他的成对符号还有引号,主要有双引号和单引号。成对符号常见的差不多就这些,这里说的成对符号一定要包住是指成对符号一定要成对出现。比如你不能只写一个花括号的其中一半 “{”,而把另一半 “}” 给忘了。这其实也是个典型的低级错误,之所以单独拿出来讲是因为当程序写的复杂起来嵌套结构变多之后这些成对符号很容易写着写着就把另一半给忘掉了。有时候,在嵌套结构多的程序段里一组成对符号没包住会出现些匪夷所思的错误提示,这基本是新人们最容易翻跟头的地方,大家一定要小心!

5. 对某些概念不要钻牛角尖

初学者在初期接受一些概念性东西的时候往往容易陷入钻牛角尖而不得的尴尬境地,比如 C语言 里的指针。指针应该是令 C语言 初学者最为困扰的一个概念,因为这是 C语言 中一个完全抽象性的概念 。所谓抽象性概念,一定要用你的抽象思维去理解,很多抽象性概念是不容易具象表达出来的。

往远一点说开去,所有的高级语言其实都是计算机和人之间隔着的一层抽象关系。要知道计算机内部实现逻辑是很抽象的,它内部只认识 0 和 1 ,而我们的现实世界是很复杂的。计算机就是发明出来帮我们人类处理现实问题的,而现实问题映射到计算机里只能简化成二进制的 0 和 1 来表示,进而去计算。编程语言在这里所起到的作用其实就是连接计算机的内部抽象实现和我们人类的抽象思维,说到这里,你的抽象思维还算过关吗?

具体到指针这个概念,其实初学者不用在初学阶段去死磕它到底是什么,只需要记住课本上一句关于指针的描述性概念:一个变量的地址称为该变量的指针。目前记住这句话就够了。

6. 学习要沉得住气,切勿心浮气躁,急于求成

本篇文章主要是面向大学 CS 专业新生群体里的编程初学者聊一些过来人的经验。当然你即使不是大学新生,只要满足编程初学者的设定,本篇文章所聊到的东西对你来说仍然是适用的。到文章末尾了,我最后再说一下要做好编程这件事应该具备的一些心态,以及给新人同学们的一些寄语。

可能你在学习了很长一段时间后成果仍仅限于在黑洞洞的终端窗口输出一些看似意义不大的字符。你可能会怀疑,会动摇,自己的努力仿佛都是无意义,或者说无用的。毕竟,在终端窗口里输出一句 Hello World ! 这件事从表面上看确实没什么意义。你可能会想当然地觉得编程这件事本身就没什么意义,能解决的好像都是些无用的问题。其实要解决这个疑惑涉及到的问题很深刻,甚至牵扯到编程的本质是什么这种元问题……好啦扯远了!我非常理解这些疑惑,因为我也曾一度被这样的问题困扰着。其实基础的编程教学都不会教初学者玩 GUI,就是图形用户界面。但编程最基础的,也是最本质最需要解决的东西,就是“如何高效快速地算出两个数相乘之积”这些看似简单的问题。给一些具体问题套上 GUI,问题会变得更为复杂点,但拆开来看仍是由很多很多“如何高效快速地算出两个数相乘之积”这些看似简单的问题组成的。那些复杂花哨的 GUI 程序,起点都是“如何在终端打印 Hello World !”,“如何高效快速地算出两个数相乘之积”,这些简单的问题!所以,年轻人,学习要沉得住气!学校教的,或者说基础教学教你的,都是看似简单,却基础重要的多的东西。越是基础的东西,就越是不容易过时,越是你应该珍惜,会使你终身受用的东西!

完!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • 转自http://blog.csdn.net/xugangwen/article/details/44811783...
    扎Zn了老Fe阅读 12,716评论 1 142
  • 姓名:于川皓 学号:16140210089 转载自:https://www.zhihu.com/people/zh...
    道无涯_cc76阅读 670评论 0 3
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,316评论 2 35
  • 才上泰岳归北楚, 又从稽山姚水游。 豪侠风神贯武昌, 鄂冶血脉溯越州。 幸得王鲁精魂在, 难遣亿兆良知忧。 桂子一...
    真心给您阅读 328评论 0 2
  • 原谅一个人是容易的 但再次信任 就没那么容易了 暖一颗心要多少年 凉一颗心只要一瞬间 活着 就要善待自己 别跑到别...
    释果安阅读 504评论 0 0