一.語(yǔ)言使用錯(cuò)誤
在打代碼的過(guò)程中,經(jīng)常需要在中文與英文中進(jìn)行轉(zhuǎn)換,因此常出現(xiàn)一些符號(hào)一不小心就用錯(cuò),用成中文。例如:“;”中文中的分號(hào)占用了兩個(gè)字節(jié),而英文中“;”分號(hào)只占用一個(gè)字節(jié)。編譯器只能識(shí)別英文。因此會(huì)報(bào)錯(cuò)。在報(bào)錯(cuò)后檢查這些字符時(shí)最需要眼力和時(shí)間的。因此打代碼是需注意。
二.忘打分號(hào)
分號(hào)是C語(yǔ)言是語(yǔ)句的標(biāo)志,在C中無(wú)分號(hào)不成語(yǔ)句,無(wú)語(yǔ)句不能識(shí)別。
在編譯中如果沒(méi)有分號(hào),編譯器就會(huì)將,b=2合到上一個(gè)語(yǔ)句a=1中,進(jìn)而出現(xiàn)語(yǔ)法錯(cuò)誤。

三.多打分號(hào)
復(fù)合語(yǔ)句中,花括號(hào)后不應(yīng)再加分號(hào),雖然不會(huì)有什么影響,但是多此一舉,毫無(wú)意義。

另外,if(a == 0)后不應(yīng)加分號(hào),if(a ==0)后加分號(hào)就會(huì)是語(yǔ)句提前結(jié)束,而使用if的目的就是為了控制其后的語(yǔ)句,加了分號(hào)之后。程序?qū)⒂肋h(yuǎn)執(zhí)行i++,不論a是否等于0.

for()后不應(yīng)加分號(hào)。

本意是輸入4個(gè)數(shù),每輸入一個(gè)數(shù)后再將它輸出。由于for()后多加了個(gè)分號(hào),導(dǎo)致循環(huán)變成空語(yǔ)句,此時(shí)就變成只能輸入一個(gè)數(shù)并輸出了。
四.變量命名的錯(cuò)誤
C語(yǔ)言規(guī)定,標(biāo)示符由字母,數(shù)字和下劃線(xiàn)“_"組成,它的第一個(gè)字母必須是字母或下劃線(xiàn)。
在C語(yǔ)言中變量的命名不允許出現(xiàn)的情況有以下三種:1.以數(shù)字開(kāi)頭進(jìn)行開(kāi)頭;2.不能包含運(yùn)算符;3.不能與系統(tǒng)保留字(即關(guān)鍵字重名)。一旦出現(xiàn)這三種情況之一,編譯器就會(huì)報(bào)錯(cuò)。如下圖所示:

這里附上C語(yǔ)言中的關(guān)鍵字,即用作專(zhuān)用的定義符,也稱(chēng)為保留字。

作為C語(yǔ)言的初學(xué)者,變量的命名往往是簡(jiǎn)單單調(diào)的。而程序員大佬往往用具有特定意義的英文單詞進(jìn)行命名,并形成了一套自己的命名法則:業(yè)界目前共有四種命名法則;駝峰命名法,匈牙利命名法,帕斯卡命名法和下劃線(xiàn)命名法。其中前三種是比較流行的命名法。1.駝峰命名法是將每個(gè)單詞(邏輯斷點(diǎn))用大寫(xiě)字母區(qū)分開(kāi)。2.匈牙利命名法通過(guò)在變量名前面加上小寫(xiě)字母的符號(hào)標(biāo)識(shí)作為前綴,標(biāo)識(shí)出變量的作用域,類(lèi)型等。3.帕斯卡命名法。與駝峰命名法類(lèi)似,只不過(guò)將開(kāi)頭首字母換成了大寫(xiě)字母。4.下劃線(xiàn)命名法是將每個(gè)單詞(邏輯斷點(diǎn))用下劃線(xiàn)隔開(kāi)。

五.忽略大小寫(xiě)字母的區(qū)別

出現(xiàn)這種情況編譯器會(huì)將a和A認(rèn)為是兩個(gè)不同的變量,因而報(bào)錯(cuò)。因此在定義變量和輸出變量的同時(shí)要注意大小寫(xiě)字母的一致性。因?yàn)镃會(huì)將大寫(xiě)字母和小寫(xiě)字母看成是不同的字符。
六.數(shù)據(jù)類(lèi)型的使用錯(cuò)誤
例如:我們要輸出一個(gè)a = 3.1415的情形。如果數(shù)據(jù)類(lèi)型使用錯(cuò)誤,將得不到我們想要的結(jié)果。使用整型,將只輸出3。必須使用浮點(diǎn)型float,double,long double。


七.“/”運(yùn)算時(shí),和“%”時(shí)計(jì)算結(jié)果的錯(cuò)誤
“/”運(yùn)算時(shí),參與運(yùn)算的兩個(gè)數(shù)均為整型時(shí),結(jié)果為舍去小數(shù)的整型數(shù),例如;

盡管定義了浮點(diǎn)型但是結(jié)果卻是1.0,而不是我們想要的1.5。為得到1.5的結(jié)果,我們必須將3/2改成3.0/2,或者是3/2.0.才能輸出1.5的結(jié)果。

如果除數(shù)和被除數(shù)中有一個(gè)為負(fù)值,其結(jié)果與具體實(shí)現(xiàn)有關(guān)。例如:“-9/7”在有的系統(tǒng)中計(jì)算結(jié)果為-2,有的系統(tǒng)計(jì)算結(jié)果為-1,這是對(duì)小數(shù)部分的舍入處理不同造成的?!?”要求參與的運(yùn)算操作數(shù)均為整型,計(jì)算結(jié)果的符號(hào)與“%”左側(cè)運(yùn)算對(duì)象的符號(hào)相同,如“-9/4"的結(jié)果為-1。一旦非整型,編譯器將報(bào)錯(cuò)。

也就是說(shuō)整型變量a和b可以進(jìn)行求余運(yùn)算,而實(shí)型變量則不允許進(jìn)行“求余”運(yùn)算。
八.字符常量和字符串常量的表示錯(cuò)誤
字符變量是用類(lèi)型符char定義字符變量,字符常量是由一對(duì)單引號(hào)扣起來(lái)的單個(gè)字符;字符串常量是用雙引號(hào)括起來(lái)的字符序列,在C中通常以“/”作為結(jié)束標(biāo)志。像下面的字符串"a",實(shí)際上包含兩個(gè)字符'a'和'',這把它們賦給一個(gè)變量是不行的。

九.“=”與“==”的混淆
在C語(yǔ)言中“=”是賦值運(yùn)算符,而“==”則是關(guān)系運(yùn)算符。命名的不同者也就意味著作用不同和優(yōu)先級(jí)的不同。關(guān)系運(yùn)算符的的優(yōu)先級(jí)高于賦值運(yùn)算符。

if()括號(hào)中的語(yǔ)句是進(jìn)行判斷的內(nèi)容,判斷a是否等于4,所以說(shuō)里面的符號(hào)應(yīng)該用關(guān)系運(yùn)算符“==”而不是賦值運(yùn)算符“=”。正確的表示如下:

十.scanf()括號(hào)中忘記加地址運(yùn)算符“&”

這樣的書(shū)寫(xiě)時(shí)不合法的。scanf函數(shù)是格式輸入函數(shù),它從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))讀取輸入信息。也就是按照啊a,b在內(nèi)存的地址將a,b的值存進(jìn)去,“&a”就是指a在內(nèi)存中的地址。
十一.間隔符的不注意
scanf()函數(shù)一般以空格鍵,Tab鍵或Enter鍵作為分隔符,當(dāng)格式中字符傳中存在非格式字符時(shí),輸入時(shí)也需要一并輸入。例如:

應(yīng)當(dāng)輸入:

十二.輸入數(shù)據(jù)時(shí)結(jié)束情況的不熟悉
C語(yǔ)言中,輸入數(shù)據(jù)時(shí),遇到以下3種情況則認(rèn)為該數(shù)據(jù)結(jié)束:
1.遇空格鍵,Tab鍵,或Enter鍵;
2.有指定數(shù)據(jù)長(zhǎng)度時(shí),系統(tǒng)自動(dòng)按長(zhǎng)度截??;
3.遇非法輸入。
十三.輸入字符的格式與要求不一致
在C中,在用“%c”輸入時(shí),空格和轉(zhuǎn)義字符均作為有效字符。

字符“a”賦給c1,字符“ ”賦給c2,字符“b”送給c3,因?yàn)?c只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔。
十四.輸入數(shù)據(jù)時(shí)規(guī)定精度

輸入數(shù)據(jù)時(shí)企圖規(guī)定精度,這樣做在C中是不合法的。
十五.使用switch語(yǔ)句中漏寫(xiě)break語(yǔ)句
例如:打印學(xué)生成績(jī)

如果漏寫(xiě)break語(yǔ)句,case只起標(biāo)號(hào)作用,而不起判斷作用。也就是假如輸入A,就會(huì)直接執(zhí)行到最后一個(gè)printf語(yǔ)句,而不會(huì)在第一個(gè)printf語(yǔ)句執(zhí)行后截止。因此必須在每個(gè)printf語(yǔ)句后加上break.例如:

十六.數(shù)組的部分錯(cuò)誤
1.數(shù)組后面的元素個(gè)數(shù)應(yīng)與聲明的一致。如果與聲明不一致,超出聲明后面的數(shù)字默認(rèn)為0。

2.必須聲明元素個(gè)數(shù)。

十七.忽略了while和do-while語(yǔ)句在細(xì)節(jié)上的區(qū)別


如圖所示,當(dāng)輸入i大于10時(shí)二者的結(jié)果就不同了。這是因?yàn)閣hile循環(huán)是先判斷后執(zhí)行,而do-while循環(huán)是先執(zhí)行后判斷。對(duì)于大于10的數(shù),while語(yǔ)句中編譯器不循環(huán)循環(huán)體,而do-while語(yǔ)句編譯器則要執(zhí)行一次循環(huán)體。
十八.定義數(shù)組時(shí)誤用變量

數(shù)組后面用方括號(hào)括起來(lái)的是常量表達(dá)式,可以包含常量和符號(hào)常量。即C不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義。
十九.多加了地址運(yùn)算符“&”

C語(yǔ)言中,scanf函數(shù)中的輸入是字符數(shù)組名時(shí),就不必在加地址符&。需改為:

二十.同時(shí)定義了形參和函數(shù)中的局部變量

形參應(yīng)該在函數(shù)體外定義,而局部變量應(yīng)該在函數(shù)體內(nèi)定義。應(yīng)改為:

二十一.在定義數(shù)組時(shí)將定義的“元素個(gè)數(shù)”誤以為是可使的最大下標(biāo)值

C語(yǔ)言規(guī)定:定義時(shí)用a[10],表示數(shù)組有10個(gè)元素。其下標(biāo)值由0開(kāi)始,所以數(shù)組元素a[10]是不存在的。
二十二.二維數(shù)組的定義
1.C語(yǔ)言中,不能使用一次方括號(hào)來(lái)表示二維數(shù)組的元素,表示非法的例子如下:

2.另外,由于系統(tǒng)不會(huì)檢查二維數(shù)組元素的下標(biāo)是否越界,以此需要編程人員注意限制下標(biāo)不要越界。例如:

希望對(duì)于初學(xué)者的你有幫助!
審核編輯:湯梓紅
電子發(fā)燒友App










評(píng)論