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

C 語言猜數字遊戲:隨機數生成、交互邏輯與代碼規範完整示例

     編輯:關於C語言

C 語言猜數字遊戲:隨機數生成、交互邏輯與代碼規範完整示例

經典「猜數字」遊戲:程序生成 1-100 隨機數,用戶反複猜測,程序提示「大了/小了/對了」,統計猜測次數。本文提供模塊化、可重玩、代碼規範的完整實現。

代碼結構

#include 
#include 
#include 

#define MAX_NUMBER 100

void initialize_number_generator(void); // 初始化隨機種子
int new_secret_number(void);            // 生成新隨機數
void read_guesses(int secret);          // 交互猜測循環

int main(void) {
    char command;
    initialize_number_generator();
    do {
        int secret = new_secret_number();
        printf("A new number has been chosen.\n");
        read_guesses(secret);
        printf("Play again? (Y/N) ");
        scanf(" %c", &command);
        printf("\n");
    } while (command == 'y' || command == 'Y');
    return 0;
}

void initialize_number_generator(void) {
    srand((unsigned)time(NULL)); // 僅調用一次!
}

int new_secret_number(void) {
    return rand() % MAX_NUMBER + 1; // 1~100
}

void read_guesses(int secret) {
    int guess, count = 0;
    for (;;) {
        count++;
        printf("Enter guess: ");
        scanf("%d", &guess);
        if (guess == secret) {
            printf("You won in %d guesses!\n\n", count);
            return;
        } else if (guess < secret)
            printf("Too low, try again.\n");
        else
            printf("Too high, try again.\n");
    }
}

關鍵規範點解析

  1. 隨機種子僅初始化一次:srand(time(NULL)) 放在 initialize_number_generator,主程序調用一次。若放在循環內,同秒內重複遊戲會生成相同隨機數。
  2. 2. 模塊化設計:初始化、生成、交互三職責分離,便於測試與維護。 3. 輸入緩衝區處理:scanf(" %c", &c) 格式串前加空格,跳過殘留換行符,避免「Play again?」直接讀到上一次換行導致邏輯錯誤。 4. 無限循環正確退出:for(;;) 配合 return 退出函數,比 while(1) + break 更清晰。 5. 常量宏定義:MAX_NUMBER 便於調整範圍,避免魔術數字分散代碼中。

編譯運行示例

$ gcc guess.c -o guess
$ ./guess
Guess the secret number between 1 and 100.

A new number has been chosen.
Enter guess: 50
Too high, try again.
Enter guess: 25
Too low, try again.
Enter guess: 37
You won in 3 guesses!

Play again? (Y/N) n

擴展建議

  • 增加難度等級:修改 MAX_NUMBER 或實現二分查找提示。
  • 記錄最佳成績:文件存儲最少猜測次數。
  • 圖形界面:用 ncurses/SDL 實現 TUI/GUI 版本。
  • 作弊模式:調試時打印秘密數字驗證邏輯。

總結

這個百行內的小程序,涵蓋了 C 語言「隨機數、標準 I/O、循環控制、函數分解、宏常量、緩衝區處理」等核心基礎技能,是從「會寫語法」到「會寫工程代碼」的優秀練習題。

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