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

C語言猜數字遊戲:菜單驅動、隨機數生成與迴圈控制完整教學

     編輯:關於C

遊戲規則

  • 系統隨機產生 0~100 之間整數。
  • 玩家反覆輸入猜測值。
  • 系統提示「太大」、「太小」或「恭喜猜中」。
  • 支援選單:1 開始、0 退出。

核心知識點

  1. 隨機數種子:`srand((unsigned)time(NULL))` 僅在程式啟動呼叫**一次**。
  2. 範圍限制:`rand() % 101` 產生 0~100。
  3. 選單迴圈:`while(input)` 配合 `switch` 處理多重選項。
  4. 猜測迴圈:`while(1)` 配合 `break` 結束單局遊戲。

完整優化版程式碼

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 

void print_menu() {
    puts("************************");
    puts("**** 1. Start Game ****");
    puts("**** 0. Exit       ****");
    puts("************************");
}

int main() {
    srand((unsigned)time(NULL)); // 全程只呼叫一次!
    int choice = 1;

    puts("Welcome to Guess Number Game!");

    while (choice) {
        print_menu();
        printf("Enter choice: ");
        if (scanf("%d", &choice) != 1) {
            while (getchar() != '\n'); // 清理非數字輸入
            puts("Invalid input!");
            continue;
        }

        switch (choice) {
            case 1: {
                int target = rand() % 101;
                int guess;
                puts("Guess a number (0-100):");
                while (1) {
                    printf("> ");
                    if (scanf("%d", &guess) != 1) {
                        while (getchar() != '\n');
                        puts("Please enter a number!");
                        continue;
                    }
                    if (guess > target) puts("Too large!");
                    else if (guess < target) puts("Too small!");
                    else { puts("Correct!"); break; }
                }
                break;
            }
            case 0:
                puts("Goodbye!");
                break;
            default:
                puts("Invalid option!");
        }
    }
    return 0;
}

關鍵改進點

原始問題改進方案
`srand` 在迴圈中重複呼叫移至 `main` 開頭,僅呼叫一次
無輸入驗證,`scanf` 失敗導致無限迴圈檢查 `scanf` 回傳值,失敗時清空緩衝區
魔術數字分散可定義 `MAX_NUM 100` 常數
單一檔案所有邏輯拆分為 `menu.c/h`、`game.c/h`、`random.c/h`

進階擴展功能

  • 猜測次數限制:最多 7 次(二分搜尋邏輯)。
  • 難度選擇:簡單 0~50、普通 0~100、困難 0~1000。
  • 高分榜:記錄最少猜測次數,存檔持久化。
  • 提示模式:輸入 -1 顯示範圍縮小提示。
  • 作弊模式:輸入 -999 直接顯示答案(除錯用)。

常見初學者錯誤

  1. `srand(time(NULL))` 放在 `while` 迴圈內 → 同一秒內多次遊戲產生相同隨機數。
  2. `rand() % 100` → 產生 0~99,非 0~100。
  3. 未處理 `scanf` 回傳值 → 輸入字母導致無限迴圈。
  4. 變數命名混亂(`n`, `m`, `ch` 混用)。

總結

猜數字遊戲雖簡單,卻涵蓋了 C 語言**標準庫使用(``, ``)、隨機數機制、輸入驗證、迴圈巢狀、選單驅動架構**等核心實務技能。掌握本範例的優化版結構,即可輕鬆擴展為更複雜的文字介面遊戲專案。

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