語法書 / AA 競程語法書 下冊 / 第八單元 / 本單元常犯錯誤總覽

本單元常犯錯誤總覽

# 錯誤描述 錯誤類型 ✗ 錯誤寫法 ✓ 正確寫法
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];