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編譯器原理上 編譯器總是要為函式的每個...