用戶輸入星期英文首字母,程式判斷對應星期幾。若首字母相同(T: Tuesday/Thursday,S: Saturday/Sunday),需提示輸入第二字母進一步區分。輸入 'Q'/'q' 退出程式。
#include <stdio.h>
#include <conio.h> // getch() 無緩衝讀取單字元
int main() {
char letter;
printf("please input the first letter:\n");
while ((letter = getch()) != 'Q' && letter != 'q') {
printf("%c:\n", letter);
if (letter == '\n') { printf("\n"); continue; } // 忽略換行
switch (letter) {
case 'M': case 'm':
printf("Monday\n\n"); break;
case 'W': case 'w':
printf("Wednesday\n\n"); break; // 修正原碼拼寫 Wensday
case 'F': case 'f':
printf("Friday\n\n"); break;
case 'T': case 't':
printf("please input next letter:\n");
letter = getch();
if (letter == 'U' || letter == 'u')
printf("Tuesday\n\n");
else if (letter == 'H' || letter == 'h')
printf("Thursday\n\n");
else
printf("not weekday!\n\n");
break;
case 'S': case 's':
printf("please input next letter:\n");
letter = getch();
if (letter == 'A' || letter == 'a')
printf("Saturday\n\n");
else if (letter == 'U' || letter == 'u')
printf("Sunday\n\n");
else
printf("not weekday!\n\n");
break;
default:
printf("^v^ not defined yet ^v^\n\n");
}
}
return 0;
}
| 技術 | 說明 |
|---|---|
getch() | 無回顯、無緩衝讀取單字元,適合即時互動選單(需 conio.h,Windows 專用)。Linux 可用 termios 設置原始模式替代。 |
| 大小寫兼容 | 每個 case 同時處理大寫/小寫,或統一 toupper(letter) 後再 switch。 |
| 巢狀輸入 | 首字母 T/S 時,再次呼叫 getch() 讀取第二字母,完成消歧。 |
| 迴圈退出條件 | while ((letter = getch()) != 'Q' && letter != 'q') 同時完成讀取與判斷。 |
scanf/getchar 易殘留換行符,純用 getch() 避免此問題。getchar() 配合 system("stty raw -echo") / tcsetattr 實現同等效果。strncmp 比對。please input the first letter: T: please input next letter: U Tuesday S: please input next letter: A Saturday M: Monday Q (程式結束)
這個小程式展示了 switch 多路分支、巢狀輸入處理、字元大小寫兼容、非阻塞單字元讀取等實用技巧。適合作為 C 語言初學者「選單交互」練習的範本,亦可擴展為通用的「縮寫命令解析器」雛形。