實現「反覆輸入 → 範圍校驗 → 比較大小 → 提示大了/小了/猜中 → 猜中退出」的完整遊戲循環,引入 else if 多條件分支結構。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 產生 1-500 隨機數
int get_number() {
srand((int)time(0));
return rand() % 499 + 1;
}
int main() {
int mynum, guessnum = get_number();
while (1) { // 外層:遊戲主循環
// 內層:輸入校驗循環
while (1) {
printf("你好,請輸入一個數字: ");
scanf("%d", &mynum);
if (mynum > 500 || mynum < 1)
printf("數字僅限於 1-500 之間\n");
else {
printf("\n你輸入的數字是: %d\n", mynum);
break; // 合法輸入,跳出校驗循環
}
}
// else if 多條件分支比較
if (mynum > guessnum)
printf("數字大了!\n");
else if (mynum < guessnum)
printf("數字小了!\n");
else {
printf("祝賀您,您猜中了!\n");
break; // 猜中,結束遊戲
}
}
return 0;
}
$ ./myguess
你好,請輸入一個數字: 55
你輸入的數字是: 55
數字小了!
你好,請輸入一個數字: 280
你輸入的數字是: 280
數字小了!
...
你好,請輸入一個數字: 430
你輸入的數字是: 430
祝賀您,您猜中了!
if (條件1) { ... }
else if (條件2) { ... }
else if (條件3) { ... }
...
else { ... } // 可選:以上條件均不滿足時執行
else 塊(若存在)// 等價於嵌套 if-else
if (條件1) { ... }
else {
if (條件2) { ... }
else {
if (條件3) { ... }
else { ... }
}
}
else if 扁平化結構,提升可讀性,避免「箭頭型」代碼。
srand(time(0)) 以當前時間秒數為種子,每次運行序列不同rand() % 499 + 1 產生 1-499,配合 +1 得 1-500(原代碼 499+1=500)srand 應僅調用一次,放在循環外| 層級 | 職責 | 退出條件 |
|---|---|---|
| 內層 while(1) | 輸入校驗 | 輸入合法 break |
| 外層 while(1) | 遊戲主流程 | 猜中 break |
通過 else if 實現多路互斥分支,雙層循環分離「輸入合法性」與「遊戲邏輯」,代碼結構清晰。下一步可加入嘗試次數統計、歷史記錄、難度選擇等功能。