使用者輸入星期英文首字母,程式判斷對應星期。若首字母重複 (T/Tu/Th, S/Sa/Su),再要求輸入第二字母判斷。支援大小寫不敏感,輸入 Q/q 結束。
#include <stdio.h>
#include <conio.h> // Windows 專用 _getch()
int main() {
char letter;
printf("Please input the first letter (Q to quit):\n");
while ((letter = _getch()) != 'Q' && letter != 'q') {
printf("%c:\n", letter);
if (letter == '\n' || letter == '\r') {
printf("\n");
continue;
}
switch (letter) {
case 'M': case 'm':
printf("Monday\n\n");
break;
case 'T': case 't':
printf("Please input next letter: ");
letter = _getch();
if (letter == 'U' || letter == 'u')
printf("Tuesday\n\n");
else if (letter == 'H' || letter == 'h')
printf("Thursday\n\n");
else
printf("Not a weekday!\n\n");
break;
case 'W': case 'w':
printf("Wednesday\n\n");
break;
case 'F': case 'f':
printf("Friday\n\n");
break;
case 'S': case 's':
printf("Please input next letter: ");
letter = _getch();
if (letter == 'A' || letter == 'a')
printf("Saturday\n\n");
else if (letter == 'U' || letter == 'u')
printf("Sunday\n\n");
else
printf("Not a weekday!\n\n");
break;
default:
printf("^v^ Not defined yet ^v^\n\n");
break;
}
}
return 0;
}
| 技術點 | 說明 |
|---|---|
_getch() / getch() | 無緩衝、無回顯讀取單一字元,Windows conio.h 提供。Linux 用 termios 設定原始模式。 |
switch-case 處理字元 | 字元提升為 int 比較,支援多標籤 case 'M': case 'm': 簡化大小寫判斷。 |
| 巢狀輸入 | 首字母歧義時,立即呼叫第二次 _getch() 讀取次字母。 |
| 迴圈結構 | while((letter=_getch())!='Q'...) 將讀取與判斷合併,簡潔高效。 |
// Linux 版 getch 實作
#include <termios.h>
#include <unistd.h>
int getch(void) {
struct termios oldt, newt;
int ch;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
Please input the first letter (Q to quit):
T:
Please input next letter: u
Tuesday
S:
Please input next letter: a
Saturday
Q
scanf("%s") 比對前綴)。setlocale 與寬字元支援)。教學價值:此程式展示
switch-case多層決策、字元無緩衝輸入、大小寫處理、迴圈控制等 C 語言控制台互動核心技巧,適合初學者練習。