猜數字遊戲是初學者練習隨機數生成、迴圈控制、使用者互動的絕佳專案。本文提供結構化、模組化的完整實作。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 選單顯示函數
void showMenu() {
printf("*********************\n");
printf("歡迎進入猜數字遊戲系統!\n");
printf("選擇:\n");
printf("1. 開始遊戲\n");
printf("2. 退出系統\n");
printf("*********************\n");
}
// 遊戲核心邏輯
void playGame(int target) {
int guess;
int attempts = 0;
printf("\n--- 遊戲開始:請猜 1-100 之間的數字 ---\n");
while (1) {
printf("輸入你猜的數字: ");
if (scanf("%d", &guess) != 1) {
printf("輸入無效,請輸入整數!\n");
while (getchar() != '\n'); // 清除輸入緩衝區
continue;
}
attempts++;
if (guess < target) {
printf("太小了!再試一次\n");
} else if (guess > target) {
printf("太大了!再試一次\n");
} else {
printf("恭喜你,猜對了!答案是 %d\n", target);
printf("你總共猜了 %d 次\n", attempts);
break;
}
}
}
int main() {
// 初始化隨機種子
srand((unsigned int)time(NULL));
int choice;
while (1) {
showMenu();
printf("請輸入選項 (1-2): ");
if (scanf("%d", &choice) != 1) {
printf("輸入無效!\n");
while (getchar() != '\n');
continue;
}
switch (choice) {
case 1: {
int target = rand() % 100 + 1; // 1-100
playGame(target);
break;
}
case 2:
printf("感謝遊玩,再見!\n");
return 0;
default:
printf("無效選項,請輸入 1 或 2\n");
}
printf("\n");
}
return 0;
}
1. 隨機數生成
srand(time(NULL)) 以當前時間作為種子,確保每次執行產生不同隨機序列。rand() % 100 + 1 產生 1-100 的整數。
2. 模組化設計
將選單顯示、遊戲邏輯拆分為獨立函數,符合單一職責原則,提升程式碼可讀性與維護性。
3. 輸入驗證與緩衝區清理
使用 scanf 回傳值檢查輸入有效性,並用 while(getchar() != '\n') 清除錯誤輸入殘留的換行符,避免無限迴圈。
4. 遊戲統計
新增 attempts 計數器,記錄玩家猜測次數,增加遊戲趣味性。