問題代碼
#include
using namespace std;
int main() {
int a, b, i, c[4];
cin >> a;
for (i = 1; i <= a; i++) {
for (b = 1; b <= 4; b++) {
cin >> c[b]; // 錯誤1:下標越界
}
cout << c[1] << c[2] << c[3] << c[4] << a; // 錯誤2:c[4] 越界
}
return 0;
}
錯誤分析
- 數組下標越界:
c[4] 只有 4 個元素,合法下標 0~3。循環 b=1; b<=4; b++ 訪問 c[1]~c[4],c[4] 越界,導致未定義行為(可能覆蓋變量 a)。
- 外層循環邏輯無意義:
i=1; i<=a; i++ 重複讀取 a 次數據,每次覆蓋數組,只有最後一次輸出有效。
修正代碼
#include
using namespace std;
int main() {
int a, b, i, c[4];
cin >> a; // 輸入 a(用途不明,示例保留)
for (b = 0; b < 4; b++) { // 下標 0~3
cin >> c[b];
}
for (b = 0; b < 4; b++) {
cout << c[b] << " ";
}
cout << a;
return 0;
}
關鍵點
- C++ 數組下標從 0 開始,長度 N 合法範圍
[0, N-1]。
- 循環條件用
b < 4 而非 b <= 4。
- 避免無意義的重複讀取覆蓋,除非需處理多組數據。
- 開啟編譯器警告(
-Wall -Wextra)可捕獲部分越界。