c語言程式設計常見錯誤

2021-10-03 16:03:20 字數 2769 閱讀 3696

1.書寫識別符號時,忽略大小寫。

main()

編譯程式會出錯。c語言區分大小寫。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。

2.忽略變數型別,進行不合法運算

main()

%是求餘運算,得到a/b的整餘數。整型變數可進行求餘運算,而實型變數則不允許進行求餘運算。

3.將字元常量與字串常量混淆

char a;

a="b";

字元常量是一對單引號括起來的常量,字串常量是一對雙引號括起來的常量。c語言規定以「\0」作為字串結束標誌,它是系統自動加上的,所以字元常量「b」其實包含兩個字元'b' '\0',而把它賦給乙個字元變數是不行的。

4.忽略了「=」和「==」的區別

if(a==b)a=b;

c語言中,「=」是賦值運算子,「==」是關係運算子。在此**中,前者是進行比較,後者是進行賦值。

5.忘記加分號

c=1b=2

幾乎在所有程式語言中,都是用「;」代表一句或多句語句的結束。

6.多加分號

(1);

(2)if(a%2==0);

a+=a;

(3)for(i=0;i<5;++i);

7.忘加位址運算子「&」

int a;

scanf("%d",a);

8.輸入資料的方式與要求不符

scanf("%a%b",&a,&b);

輸入時不能用「,」將a,b隔開如:3,4;應該用空格

scanf("%a,%b",&a,&b);

此時應輸入a,b 才是正確的

scanf("a=%d,b=%d",&a,&b);

此時應輸入a=3,b=4

9.輸入字元的格式與要求不一致

在用「%c」格式輸入字元時,空格字元和轉義字元都作為有效字元輸入。

scanf("%c%c%c",&c1,&c2,&c3);

如輸入:a b c 字元「a」賦值給c1,字元「 」賦值給c2,「b」賦值給c3。正確形式應輸入:abc

10.輸入、輸出的資料型別與所用格式說明符不一致

int a=1;

float b=1.2;

printf("%f%d",a,b);

這種錯誤要引起重視,編譯器不會出現錯誤,但執行結果錯誤。

11.輸入資料時,規定精度

scanf("%6.2lf",&a);

輸入資料時不能規定精度。

12.switch語句中漏寫break語句

switch(grade)

由於漏寫了break語句,case只起標識的作用,而不起判斷的作用。當grade的值為a時,程式會從上到下執行完,五個printf都輸出。正確的寫法應為:

switch(grade)

13.忽視while和do-while語句區別

while語句

main()

printf("%d",a);

}do-while語句

main()

while(i<=10);

printf("%d",a);

}當輸入的i值小於等於10時,兩者輸出結果無區別。當輸入的i大於10時,while語句不執行迴圈體,do-while語句執行一次迴圈題。因為while語句先判斷後執行,do-while語句先執行後判斷。

14.忽略自增(自減)運算子的細節

第乙個區別, i++ 返回原來的值,++i 返回加1後的值

main()

輸出結果: a=i+1 b=i 。因為a=++i;是先把i加1再賦值給a,可以把此句分解為:i=i+1;a=i;;b=i++; 是先把i賦值給b再加1,可分解為:b=i;i=i+1; 。

第二個區別,i++ 不能作為左值,而++i 可以

左值是對應記憶體中有確定儲存位址的物件的表示式的值,而右值是所有不是左值的表示式的值。

int i = 1;

int *p1 = &(++i); //正確

int *p2 = &(i++); //錯誤

++i = 6; //正確

i++ = 8; //錯誤

15.忽略sizeof()和strlen()的區別

char str[20]="incredibly";

int   a=strlen(str); /* a=10;strlen 計算字串的長度,以\0'為字串結束標記。 */

int   b=sizeof(str); /* b=20;sizeof 計算的則是分配的陣列str[20] 所佔的記憶體空間的大小,不受裡面儲存的內容影響*/

16.在定義陣列時,將定義的「元素個數」誤認為是可使用的最大下標

main()

;printf("%d",a[5]);

}c語言中,定義時用a[5],表示a陣列中有5個元素。其下標是從0開始的,陣列中最後乙個元素是a[4],不存在a[5]。

17.定義陣列時誤用變數

int i;

scanf("%d",#i);

int a[i];//錯

陣列名後用方括號括起來的是常量表示式,可以包括常量和符號常量。即c不允許對陣列大小作動態定義。

(18)位址運算子&使用錯誤

char str[8];

scanf("%s",&str);//錯

char str[8];

scanf("%s",str);

(19)同時定義了形參和函式中的區域性變數

int x,y,z;

int max(x,y)

形參應在函式體外定義,而區域性變數應在函式體內定義。正確的應為:

int x,y;

int max(x,y)

C語言 函式程式設計的常見錯誤

函式程式設計的常見錯誤 1 定義函式時,函式頭後面多加了分號 如 int sum int a,int b 此處不應有分號 2 定義函式時,虛參前面忘記寫型別 如 int sum a,b 每個虛參前面都應寫上型別 3 呼叫函式前忘記函式宣告 除非是定義函式在前,呼叫在後,或函式是char 或int 型...

C語言 常見錯誤

1.忘記定義變數。2.輸入輸出的資料的型別與所用格式說明符不一致。3.未注意 型資料的數值範圍。4.在輸入語句scanf中忘記使用變數的位址符。5.輸入資料的形式與要求不符。6.誤把 作為 等於 運算子。7.語句後面漏分號。8.在不該加分號的地方加了分號。9.對應該有花括號的復合語句,忘記加花括號。...

C語言 常見錯誤

1 char p 注意p中包含字串結束符 0 2 strlen函式沒有包含字串末尾的 0 3 如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體 4 createnode binnode tree,char p 訪問tree.data錯誤 原來問題出在c編譯器原理上 編譯器總是要為函式的每個...