本單元常犯錯誤總覽
| # | 錯誤描述 | 錯誤類型 | ✗ 錯誤寫法 | ✓ 正確寫法 |
|---|---|---|---|---|
| 1 | 字元 '5' 和數值 5 搞混 |
邏輯錯誤 | int d = c;(拿到 53) |
int d = c - '0'; |
| 2 | 'A'(字元)和 "A"(字串)搞混 |
編譯錯誤/邏輯錯誤 | char c = "A"; |
char c = 'A'; |
| 3 | 字元運算結果直接輸出,印出整數 | Wrong Answer | cout << 'A' + k - 1; |
cout << (char)('A' + k - 1); |
| 4 | 以為 '9' + 1 是 '10' |
邏輯錯誤 | '9' + 1(其實是 ':') |
先 c - '0' 轉數值再進位 |
| 5 | 大小寫轉換方向寫反 | Wrong Answer | 小寫轉大寫卻 + 32 |
轉大寫 + 'A' - 'a';或用 toupper |
| 6 | toupper 結果直接輸出 |
Wrong Answer | cout << toupper(c); |
cout << (char)toupper(c); |
| 7 | cctype 函式回傳值拿去和 1 比較 | 邏輯錯誤 | if (isdigit(c) == 1) |
if (isdigit(c)) |
| 8 | 想讀空白/換行卻用 cin >> |
邏輯錯誤 | cin >> c;(跳過空白) |
cin.get(c); |
| 9 | cin >> 之後接 cin.get,撞到殘留換行 |
邏輯錯誤 | 讀完 n 直接 cin.get(c) |
先 cin.get(c) 把換行丟掉 |
| 10 | 字元陣列大小忘了幫 '\0' 留位置 |
UB(越界) | 長度上限 100 開 char s[100]; |
char s[105]; |
| 11 | 用 == 比較 C 字串 |
邏輯錯誤 | if (s == t)(比位址) |
if (strcmp(s, t) == 0) |
| 12 | 以為 strcmp 回傳 ±1 |
邏輯錯誤 | if (strcmp(s, t) == 1) |
if (strcmp(s, t) > 0) |
| 13 | strlen 放進迴圈條件 |
TLE | for (int i = 0; i < strlen(s); i++) |
int len = strlen(s); 再用 len |
| 14 | 二維字元陣列第二維沒多開 | UB(越界) | char g[105][100]; 讀寬 100 的列 |
char g[105][106]; |