首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言實作:輸入首字母猜星期幾(支援二次輸入區分)

     編輯:關於C語言

需求分析

用戶輸入星期英文首字母,程式判斷對應星期幾。若首字母相同(T: Tuesday/Thursday,S: Saturday/Sunday),需提示輸入第二字母進一步區分。輸入 'Q'/'q' 退出程式。

核心邏輯:巢狀 switch 實現多級判斷

#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') 同時完成讀取與判斷。

常見問題與改進

  • 拼寫修正:原碼 "Wensday" → "Wednesday"。
  • 輸入緩衝殘留:若混用 scanf/getchar 易殘留換行符,純用 getch() 避免此問題。
  • 跨平台:Linux 下可用 getchar() 配合 system("stty raw -echo") / tcsetattr 實現同等效果。
  • 擴展性:若需支援縮寫(如 "Mon", "Tue"),可改為讀取整行字串並用 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 語言初學者「選單交互」練習的範本,亦可擴展為通用的「縮寫命令解析器」雛形。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved