#include
main() {
int c;
while((c=getchar())!='\n') {
switch(c-'2') {
case 0: case 1: putchar(c+4);
case 2: putchar(c+4); break;
case 3: putchar(c+3);
case 4: putchar(c+2); break;
}
}
}
getchar() 讀取字符直到換行符 \n,c 保存字符的 ASCII 值。c - '2'(即 c - 50)。根據輸入字符不同,進入不同 case:| 輸入字符 | ASCII | c-'2' | 匹配 case | 執行輸出 | 輸出字符 |
|---|---|---|---|---|---|
| '0'(48) | 48 | -2 | 無 | 無 | 無 |
| '1'(49) | 49 | -1 | 無 | 無 | 無 |
| '2'(50) | 50 | 0 | case 0,1 → putchar(c+4) → '6' case 2 → putchar(c+4) → '6' break | '6''6' | |
| '3'(51) | 51 | 1 | case 0,1 → putchar(c+4) → '7' case 2 → putchar(c+4) → '7' break | '7''7' | |
| '4'(52) | 52 | 2 | case 2 → putchar(c+4) → '8' break | '8' | |
| '5'(53) | 53 | 3 | case 3 → putchar(c+3) → '8' case 4 → putchar(c+2) → '7' break | '8''7' | |
| '6'(54) | 54 | 4 | case 4 → putchar(c+2) → '8' break | '8' | |
| '7'(55) | 55 | 5 | 無 | 無 |
case 0: 無 break,直接落入 case 1 再落入 case 2,直到遇到 break。case 3: 無 break,落入 case 4 執行後 break。對輸入行中的每個字符,若為 '2'..'6' 則輸出 1-2 個偏移後的字符,其他字符被忽略(無輸出)。
default: 顯式處理非預期輸入(如不輸出或報錯)。if-else 或查表法替代複雜 switch 穿透,提升可讀性。putchar 參數為 int,傳入 c+4 等整數表達式正確。