需求分析
- 程序生成一個 0-100 之間的隨機整數。
- 用戶反覆輸入猜測值,程序提示「大了」或「小了」。
- 猜中後顯示猜測次數。
- 最多允許猜 20 次。
- 要求使用函數模組化。
完整代碼實現
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void guess_game(int target);
int main(void) {
srand((unsigned)time(NULL)); // 初始化隨機種子
int secret = rand() % 101; // 生成 0-100 的隨機數
printf("=== 猜數字遊戲 ===\n");
printf("我已想好一個 0 到 100 之間的整數,你有 20 次機會。\n");
guess_game(secret);
return 0;
}
void guess_game(int target) {
int guess, count = 0;
while (count < 20) {
printf("第 %d 次猜測: ", count + 1);
if (scanf("%d", &guess) != 1) {
printf("輸入無效,請輸入整數。\n");
while (getchar() != '\n'); // 清理緩衝區
continue;
}
count++;
if (guess > target) {
printf("輸入過大!\n");
} else if (guess < target) {
printf("輸入過小!\n");
} else {
printf("恭喜!猜中了!答案是 %d。\n", target);
printf("你總共猜了 %d 次。\n", count);
return;
}
}
printf("很遺憾,20 次機會用盡。正確答案是 %d。\n", target);
}
關鍵點說明
- 隨機數種子:
srand(time(NULL)) 確保每次運行生成不同序列。
- 函數解耦:
guess_game 專注遊戲邏輯,main 負責初始化,結構清晰。
- 輸入健壯性:檢查
scanf 返回值,防止非數字輸入導致死循環。
- 次數限制:循環條件
count < 20 精確控制最多嘗試次數。