#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu() {
puts("*********************");
puts("歡迎進入猜數字遊戲!");
puts("1. 開始遊戲");
puts("0. 退出");
puts("*********************");
}
void game(int target) {
int guess;
while (1) {
printf("輸入猜測 (1-100): ");
if (scanf("%d", &guess) != 1) {
puts("輸入無效");
while (getchar() != '\n'); // 清緩衝區
continue;
}
if (guess < target) puts("太小了");
else if (guess > target) puts("太大了");
else { puts("恭喜猜中!"); break; }
}
}
int main() {
srand((unsigned)time(NULL));
int choice;
do {
menu();
printf("選擇: ");
if (scanf("%d", &choice) != 1) { while(getchar()!='\n'); continue; }
switch (choice) {
case 1: game(rand() % 100 + 1); break;
case 0: puts("再見!"); break;
default: puts("無效選項");
}
} while (choice != 0);
return 0;
}
srand(time(NULL)) 僅在程式啟動時呼叫一次。rand() % 100 + 1 產生 1~100 (注意 rand() 偏差,教學足夠)。scanf 返回值,清理緩衝區防無限迴圈。menu/game 分離,主迴圈清晰。getline + strtol 替代 scanf 更健壯。此程式為初學者練習流程控制、函數、隨機數、I/O 的絕佳專案。