語法書 / AA 競程語法書 上冊 / 附錄 / B. 常犯錯誤總表

B. 常犯錯誤總表

本表整合書中所有常犯錯誤,按類型分為編譯錯誤 (CE)執行錯誤 (RE)邏輯錯誤 (WA) 三大類,並按錯誤發生的頻率排列。

I. 編譯錯誤 (Compile Error)

錯誤 # 錯誤描述 對應單元 ✗ 錯誤寫法 ✓ 正確寫法
CE-1 忘記分號 1, 3, 4, 7 cout << x cout << x;
CE-2 cin/cout 箭頭用反 1 cout >> x;cin << x; cout << x;cin >> x;
CE-3 忘記宣告變數 2, 3 x = 10; int x; x = 10;
CE-4 宣告變數在使用之後 2 使用 x 後才 int x; 先宣告,後使用
CE-5 使用全形符號 1, 2, 3 int a = 10; int a = 10;
CE-6 大括號未配對或位置錯誤 1, 3, 4, 7 if (x > 0) { cout << x (缺閉括號) if (x > 0) { cout << x; }
CE-7 忘記 #include 1 直接用 cout #include <iostream>
CE-8 忘記 using namespace std; 1 cout << x; std::cout << x; 或加 using
CE-9 全域變數撞名 1 int data; (在某些 OJ 撞名) 改變數名稱或用局部變數

II. 執行錯誤 (Runtime Error)

錯誤 # 錯誤描述 對應單元 ✗ 錯誤寫法 ✓ 正確寫法
RE-1 陣列索引越界存取 6 int a[10]; a[10] = 5; a[9] = 5;
RE-2 指標或參考未初始化就使用 7 int* p; *p = 5; int x; int* p = &x;
RE-3 整數除以零 2, 4 int x = 5 / 0; 檢查除數是否為零
RE-4 無窮遞迴 7 int f() { return f(); } 加入終止條件
RE-5 陣列開太小導致越界 6 int a[10]; for (i=0; i<=10; i++) a[i]=i; int a[11];

III. 邏輯錯誤 (Wrong Answer)

錯誤 # 錯誤描述 對應單元 ✗ 錯誤寫法 ✓ 正確寫法
WA-1 === 搞混 3 if (x = 5) { ... } if (x == 5) { ... }
WA-2 指派運算子方向搞反 2 10 = x; x = 10;
WA-3 變數大小寫混用 2, 3, 4 int myVar; cout << myvar; cout << myVar;
WA-4 Dangling else(else 與 if 匹配錯誤) 3 cpp<br/>if (x > 0)<br/> if (x == 5)<br/> cout << "5";<br/>else<br/> cout << "not 5"; 加大括號澄清意圖
WA-5 連寫比較運算子(Python 習慣) 3 if (a < b < c) if (a < b && b < c)
WA-6 && / || 優先級錯誤 3 if (x < 0 || x > 10 && x % 2 == 0) (優先級) if ((x < 0 || x > 10) && x % 2 == 0)
WA-7 迴圈 off-by-one 錯誤 4 for (int i = 0; i <= n; i++) a[i] = i; (n=10 但陣列只到 9) for (int i = 0; i < n; i++)
WA-8 無窮迴圈 4 for (int i = 0; i < n; i--) { ... } for (int i = 0; i < n; i++)
WA-9 迴圈邊界 <<= 搞混 4 for (i = 1; i < n; i++) (應該到 n) for (i = 1; i <= n; i++)
WA-10 continue 跳過必要操作 4 cpp<br/>for (i=0; i<n; i++) {<br/> if (a[i] > 0) continue;<br/> sum += a[i];<br/>} (應該累加負數) 重新整理邏輯,確保必要操作不被跳過
WA-11 變數 i/j/k/n/m 搞混 4, 6 for (int i=0; i<n; i++) a[j]++; a[i]++
WA-12 0\(n-1 和 1\)n 索引搞混 4, 6 陣列是 0-based,但題目要求 1-based 先確認題目的索引約定
WA-13 整數溢位 2 int a = 2000000000; int b = a + a; long long a = 2000000000LL; long long b = a + a;
WA-14 未初始化變數 2, 4, 6, 7 int sum; for (...) sum += a[i]; int sum = 0;
WA-15 函式忘記 return 7 cpp<br/>int add(int a, int b) {<br/> int c = a + b;<br/>} cpp<br/>int add(int a, int b) {<br/> return a + b;<br/>}
WA-16 Pass by value 修改無效 7 cpp<br/>void inc(int x) { x++; }<br/>int a = 5; inc(a);<br/>cout << a; (輸出 5) cpp<br/>void inc(int& x) { x++; }<br/>
WA-17 max/min 參數型態不一致 7 long long ans = max(1000000000, 2000000000); long long ans = max(1000000000LL, 2000000000LL);
WA-18 ^ 不是指數運算子 2 int x = 2 ^ 10; (是 XOR,結果是 8) long long x = 1LL << 10; (或用 pow)
WA-19 輸出格式錯誤(空格、換行) 1 cout << a << b << c; (無空格分隔) cout << a << " " << b << " " << c;
WA-20 多組測資忘記重新初始化 4, 6, 7 上一個測資的 sum 沒清零 在每組測資開始時 sum = 0;