首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言數組查找常見錯誤:下標從 1 開始導致漏檢、未標記「找到」標誌位導致重複輸出「不存在」

     編輯:程式設計綜合問答

錯誤代碼還原

int a[5], i, x, t;
for (i = 1; i <= 5; i++) { // 錯誤1:下標從 1 開始
    scanf("%d", &a[i]);
}
scanf("%d", &x);
for (i = 1; i <= 5; i++) {
    if (a[i] == x) {
        printf("找到,下標 %d\n", i);
    } else {
        printf("不存在\n"); // 錯誤2:每次不匹配就輸出
    }
}

兩大核心錯誤

  1. 數組下標越界/漏檢:C 語言數組下標從 0 開始,長度 5 的數組合法下標為 0~4。for(i=1; i<=5; i++) 導致:
    - a[0] 永遠不被賦值/檢查(漏檢第一個元素)。
    - a[5] 寫入/讀取越界,行為未定義(可能覆蓋其他變量、程序崩潰)。
  2. 邏輯控制缺失「找到標誌」:循環內每次比較都輸出結果,導致「不存在」被輸出多次(最多 5 次)。正確邏輯應為:**遍歷完所有元素後,若標誌位未置位,再統一輸出「不存在」**。

修正代碼

int a[5], i, x;
int found = 0; // 標誌位,0=未找到,1=找到

for (i = 0; i < 5; i++) { // 正確:0~4
    scanf("%d", &a[i]);
}
scanf("%d", &x);

for (i = 0; i < 5; i++) {
    if (a[i] == x) {
        printf("找到,下標 %d\n", i);
        found = 1;
        break; // 找到即可退出,若需找所有位置則去掉 break
    }
}
if (!found) {
    printf("不存在\n");
}

進階:函數封裝與彈性長度

// 返回找到的下標,-1 表示不存在
int findIndex(const int *arr, int len, int target) {
    for (int i = 0; i < len; i++) {
        if (arr[i] == target) return i;
    }
    return -1;
}

// main 中調用
int idx = findIndex(a, 5, x);
if (idx >= 0) printf("找到,下標 %d\n", idx);
else printf("不存在\n");

避坑口訣

  • 數組從 0 開始,長度 N → 下標 0~N-1。
  • 循環內只做判斷與標記,循環外統一輸出結果。
  • 善用 break/return 早退出,避免無效比較。
  • 函數化:查找、排序、統計等通用邏輯封裝為函數,主函數只負責 I/O 與流程控制。

這兩個錯誤是 C 語言初學者的「必經之路」,改正後代碼即刻變得健壯、專業。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved