編寫二維數組輸入並計算平均值的程序,無論輸入什麼數值,輸出的總和恆為 0。代碼片段如下:
float score[3][4];
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 4; ++j)
scanf("%d", &score[i][j]); // 錯誤:%d 對應 int,但 score 是 float
average(*score, 12);
score 類型為 float[3][4],元素佔 4 字節。scanf("%d", ...) 期望寫入 4 字節 int,但按整數格式解析輸入,導致浮點數位模錯誤,實際內存寫入的是整數表示,而非浮點數值。average 的指針指向的內存內容已非合法浮點數,累加結果為 0 或亂碼。將格式符改為 %f:
scanf("%f", &score[i][j]); // 正確匹配 float
或使用 C++ 風格輸入避免格式符錯誤:
cin >> score[i][j];
-Wall -Wextra 或 /W4),可在編譯期捕獲格式符不匹配。std::vector<std::vector<float>> 替代原始數組,配合範圍 for 循環降低出錯概率。float (*p_ave) 實為 float*,調用時傳 score[0] 或 &score[0][0] 更清晰。格式字符串與實際變量類型嚴格對應是 C 語言輸入輸出的基石。本例中 %d 與 float 不匹配導致數據解析錯誤,改為 %f 即可解決。養成開啟高警告級別編譯的習慣,能避免 90% 此類低級錯誤。