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

C 語言二維數組輸入第一組變 0?數組下標從 0 開始是關鍵

     編輯:程式設計綜合問答

代碼中 for(i=0; i<N; i++) 正確,但輸出第一組數據變 0。實際問題往往在於:

常見錯誤 1:scanf 格式串吃掉換行符

scanf("%f%d", &M, &N); // 讀完 N 後,緩衝區留下 '\n'
for(i=0;i

修正:

scanf("%f%d", &M, &N);
getchar(); // 吸收殘留換行符
// 或用 " %f" 格式串(前面有空格)自動跳過空白字符

常見錯誤 2:排序函數邏輯錯誤導致數據錯位

代碼中 paixu 函數交換邏輯有誤:

if (i != k) {
    t_1 = food[i][1]; t_2 = food[i][0];
    food[i][1] = food[j][1]; // 錯:j 迴圈結束後是 N,越界!
    food[i][0] = food[j][0];
    food[j][1] = t_1; food[j][0] = t_2;
}

修正:用 k 交換

if (i != k) {
    t_1 = food[i][1]; t_2 = food[i][0];
    food[i][1] = food[k][1];
    food[i][0] = food[k][0];
    food[k][1] = t_1; food[k][0] = t_2;
}

常見錯誤 3:主循環條件導致重複讀入

while (scanf("%f%d", &M, &N) && M != -1 && N != -1) {
    float food[100][2] = {0}; // 每次循環重新定義數組,上輪數據丟失
    // ...
}

若需多組測試,數組應定義在循環外,或動態分配。

調試建議

  1. 每次 scanf 後檢查返回值(成功讀取的項數)
  2. 2. 打印循環變量 i,j 及讀入值確認 3. 用 fgets + sscanf 替代 scanf 更健壯 4. 開啟編譯器警告 -Wall -Wextra

核心提示:C 數組下標從 0 開始,但這不會導致「第一組變 0」;真兇通常是輸入緩衝區殘留字符或排序邏輯越界。

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