完整原始碼(含註解)
#include
#include
#include
void menu() {
printf("\n");
printf("**********1. 開始遊戲***************\n");
printf("**********0. 退出遊戲***************\n");
printf("\n");
}
int main() {
int num = 1;
printf("歡迎使用猜數字遊戲\n");
while (num) {
menu();
printf("請選擇: ");
scanf("%d", &num); // 輸入 0 或 1
switch (num) {
case 1: {
int n = 0, ch = 0;
srand((unsigned int)time(NULL)); // 以時間為種子
n = rand() % 101; // 0~100 隨機數
while (1) {
printf("請猜一個(0-100)之間的數\n");
scanf("%d", &ch);
if (ch > n) {
printf("你猜大了\n");
} else if (ch < n) {
printf("你猜小了\n");
} else {
printf("恭喜你,猜對了\n");
break;
}
}
break;
}
default:
printf("遊戲退出\n");
break;
}
}
return 0;
}
執行範例
歡迎使用猜數字遊戲
**********1. 開始遊戲***************
**********0. 退出遊戲***************
請選擇:1
請猜一個(0-100)之間的數
45
你猜大了
請猜一個(0-100)之間的數
35
你猜小了
請猜一個(0-100)之間的數
40
你猜小了
請猜一個(0-100)之間的數
43
恭喜你,猜對了
**********1. 開始遊戲***************
**********0. 退出遊戲***************
請選擇:0
遊戲退出
Press any key to continue
教學重點
- srand/rand 機制:
time(NULL) 回傳秒數,作為種子讓每次執行序列不同。
- 模運算限制範圍:
% 101 產生 0~100。
- 無限迴圈 + break:
while(1) 配合猜中時 break 跳出。
- switch 控制流程:主選單與遊戲邏輯分離,結構清晰。
常見錯誤提醒
- 忘記
#include <time.h> 導致 time 隱性宣告警告。
srand 放在迴圈內會導致同一秒內多次遊戲產生相同隨機數,應放在 case 1 區塊開頭(本碼正確)。
scanf 缺乏錯誤處理。