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

C語言經典入門專案:猜數字遊戲完整實作與優化

     編輯:關於C

專案需求

  • 選單:開始(1) / 退出(0)
  • 遊戲:隨機生成 1~100 數字,玩家反覆猜測,提示大/小/正確。
  • 猜中後回選單,可重複遊玩。

核心程式碼

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu() {
    puts("*** 歡迎來挑戰猜數字遊戲 ***");
    puts("***** 請選擇開始或退出 *****");
    puts("****** 1.start  0.exit ******");
}

void game() {
    int guess = 0;
    srand((unsigned)time(NULL));          // 以當前時間為種子
    int target = rand() % 100 + 1;        // 1~100
    while (1) {
        printf("請猜數字:");
        if (scanf("%d", &guess) != 1) {   // 輸入驗證
            puts("輸入無效,請輸入整數!");
            while (getchar() != '\n');    // 清理緩衝區
            continue;
        }
        if (guess == target) {
            puts("你真聰明,猜對了!");
            break;
        } else if (guess > target) {
            puts("你好笨,猜大了!");
        } else {
            puts("你真蠢,猜小了!");
        }
    }
}

int main() {
    int choice = 1;
    while (choice) {
        menu();
        printf("請選擇: ");
        if (scanf("%d", &choice) != 1) {
            puts("輸入錯誤!");
            while (getchar() != '\n');
            continue;
        }
        switch (choice) {
            case 1: game(); break;
            case 0: puts("再見!"); break;
            default: puts("選項不存在!");
        }
    }
    return 0;
}

關鍵技術點解析

  1. 隨機數種子:srand(time(NULL)) 僅在程式啟動時呼叫一次,避免同秒內重複序列。
  2. 輸入驗證與緩衝區清理:scanf 回傳值檢查 + while(getchar()!='\n') 防止非數字輸入導致死循環。
  3. 模組化設計:menu()、game() 分離關注點,主迴路清晰。

進階優化建議

  • 記錄猜測次數、最佳紀錄(寫入檔案)。
  • 增加難度選項(範圍 1~1000、限制次數)。
  • 使用 rand() 缺陷:低位隨機性差,建議改用 random() 或 C11 rand_s / <random> (C++)。
  • GUI 版本:結合 ncurses 或 SDL2 圖形化。

執行示例

*** 歡迎來挑戰猜數字遊戲 ***
***** 請選擇開始或退出 *****
****** 1.start  0.exit ******
請選擇: 1
請猜數字:50
你真蠢,猜小了!
請猜數字:75
你真蠢,猜小了!
...
請猜數字:89
你真聰明,猜對了!
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved