日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【C语言】C语言初学者常犯的18条错误

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言】C语言初学者常犯的18条错误 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

錯誤1:scanf中丟失&

int a; printf("Enter an integer:\t"); scanf("%d", a);

上面的代碼第3行,a前面漏了&

更正:

int a; printf("Enter an integer:\t"); scanf("%d", &a);

錯誤2:在比較語句中使用=代替==

if (x=1)printf("Found!\n");

在一般的編程語言中共有的下面的語法:
=代表賦值
==代表相等的判斷

應該這么改寫:

if (x==1)printf("Found!\n");

錯誤3:索引超出數組的末端元素

int array[10]; array[10]=42;

數組索引從0開始,終止于n-1,這個對長度為10的數組的索引10元素進行操作明顯是越界了。
既然是寫最后一個元素,那下標應該是9:

int array[10]; array[9]=42;

錯誤4:在#define語句中使用=

# define NUM = 4

這里不能用等號啊~~
應該改成這樣:

# define NUM 4

錯誤5:使用未初始化的變量

int i; if (i == 10)//do something

在Java里這就是最恐怖的“空指針異常(NullPointerException)”,無論在哪里都是要避免的,要有初始化再調用的好習慣:

int i = 10; if (i == 10)//do something

錯誤6:未包含用戶創建頭文件的路徑

# include "myfile.h"

地址路徑不對,例如:

# include "code\myfile.h"

錯誤7:使用邏輯運算符(!, ||, &&)代替位運算符(~, |, &)

char x =! 5; char y = 5 || 2; char z = 5 && 2;

上面的其實是邏輯運算符,我們實際上想用的是位運算符:

char x = ~5; char y = 5 | 2; char z = 5 & 2;

上面的語句分別代表非、或、與。

錯誤8:在switch/case語句中遺漏break語句

char x = 'd'; //do something switch (x) {case 'u': direction = 1;case 'd': direction = 2;case 'l': direction = 3;case 'r': direction = 4;default: direction = 0; }

應該有加上break的好習慣:

char x = 'd'; //do something switch (x) {case 'u': direction = 1; break;case 'd': direction = 2; break;case 'l': direction = 3; break;case 'r': direction = 4; break;default: direction = 0; }

錯誤9:遺漏大括號{}

if (ptr == NULL)printf("Unable to open a file.\n");exit(1); //do something

Java和C一樣,不加{}的話循環語句和分支語句只包含緊接著的一句。
畢竟C、Java這種語言不看縮進,不像Python。
所以exit(1)實際上式if結束以后必然會執行的語句。
應該這么寫:

if (ptr == NULL) {printf("Unable to open a file.\n");exit(1); } //do something

錯誤10:在函數聲明之前使用函數

int main(void) {test(); }void test() {//do something }

沒定義怎能使用?
所以換個順序就OK:

void test() {//do something }int main(void) {test(); }

錯誤11:用同一個名稱聲明的局部和全局變量

int x = 5; int test(void) {int x = 3;//do something }

變量命名對沖了,能避免就要避免這種事:

int x = 5; int test(void) {int y = 3;//do something }

錯誤12:在數組聲明后嘗試使用{}初始化該數組

int scores[3]; scores = {93, 91, 97};

不能這么搞啊,只能是下面兩種方式:

int scores[3] = {93, 91, 97}; int scores[3]; scores[0] = 93; scores[1] = 91; scores[2] = 97;

錯誤13:使用=將一個數組賦值給另一個數組

int scores = {93, 91, 97}; int scores2[3]; scores2 = scores;

C語言不同于Java,Java可以“數組間賦值”(其實還是用了ArrayCopy)
這么寫才是對的:

int scores = {93, 91, 97}; int scores2[3]; int i; for (i = 0; i < 3; i++)scores2[i] = scores[i];

應該用一個循環給數組逐位賦值。

錯誤14:do/while循環后遺漏分號

int num; do {num = getNum(); } while (num < 100)

do…while語句最后需要一個分號結尾:

int num; do {num = getNum(); } while (num < 100);

錯誤15:for循環使用逗號代替分號

int i; for (i = 0, i < 200, i++)//do something

一定要用分號(;)啊:

int i; for (i = 0; i < 200; i++)//do something

錯誤16:整數除法代替浮點數除法

float x = 9/4;

兩個整數的直接除法是生成一個截斷后的整數。
應該這么寫除法才能得到一個浮點數:

float x = 9.0/4;

得到2.25。

錯誤17:寫入未初始化的指針

int *y = 77;

這是不對的,應該這么寫:

int x, *y = &x; *y = 77;

錯誤18:過大的期望(或者缺乏期望)

所謂過大的期望是說:
一個初學者可能想要編寫一個完整的程序(沒有模塊化),并且期望它第一次運行就完美運行。
對于復雜程序,模塊化是必不可少的。將大的問題自頂向下逐級分解成小問題,模塊化地進行開發正是C語言這種經典面向過程的高級編程語言的開發方法。
如果不進行合理的模塊化劃分,調試的困難程度甚至呈現指數級增長,很難以維護。

所謂缺乏期望是說:
在遇到情況時,初學者可能只去驗證該代碼是否能生成結果,而不去或者不會去驗證生成的結果是否正確。
在驗證功能方面使用已知輸入和預期結果來調試程序是很關鍵的。

總結

以上是生活随笔為你收集整理的【C语言】C语言初学者常犯的18条错误的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。