代碼片段
int figure;
do {
Console.WriteLine("請輸入數字:");
figure = int.Parse(Console.ReadLine());
switch (figure) {
case 1: ... break;
case 2: ... break;
case 3: ... break;
case 4: ... break;
default: Console.WriteLine("輸入錯誤,請重新輸入"); break;
}
} while (figure <= 5); // 連續輸入 4 次錯誤後退出
原因解析
do-while **先執行一次循環體**,再判斷條件。
- 條件
figure <= 5:當輸入錯誤時 figure 可能為 0、-1、100 等。若連續輸入 4 次錯誤導致 figure 變為 6(或大於 5),條件為假,循環結束。
while (true):條件恆為真,**無視 figure 值**,永遠循環。
圖示流程
// while (figure <= 5)
輸入 6 → figure=6 → 6<=5? false → 跳出循環
輸入 0 → figure=0 → 0<=5? true → 繼續循環
// while (true)
輸入任意值 → true → 永遠繼續
修正建議
// 方案 1:無限循環 + 內部 break
while (true) {
figure = int.Parse(Console.ReadLine());
if (figure >= 1 && figure <= 4) {
// 處理業務
} else {
Console.WriteLine("輸入錯誤,請重新輸入");
}
}
// 方案 2:保留 do-while 但條件永真
do {
// ...
} while (true); // 等同 while(true)
關鍵知識點
do-while 至少執行一次。
- 循環條件**只判斷布爾值**,
true 是字面常量,不依賴變量。
- 輸入驗證邏輯應與循環控制分離:循環負責「重複」,分支負責「合法性」。