1. 認識 do-while 迴圈
來,先想像一下:你想寫一個猜數字的程式,讓使用者輸入一個數字,然後程式要至少問一次,而且要一直問到猜對為止。如果一開始條件就不成立,一般的 while 甚至連一次都不會進去。
這時候 do-while 迴圈就派上用場啦。跟 while 不一樣,它一定會先執行一次迴圈內容——就算條件一開始就是假的也一樣。就像你去超商,不管有沒有買東西都會先送你一片口香糖一樣。
do
{
// 迴圈內容:這段程式碼至少會跑一次
}
while (條件);
do-while 迴圈語法
注意最後條件括號後面的分號 ;! 一般 while 是沒有的,這裡卻有。這對新手來說超容易踩雷 XD
do-while 迴圈的步驟說明
- 先進入迴圈內容(一定會跑一次)。
- 檢查條件。
- 如果條件成立——再跑一次內容。
- 如果條件不成立——跳出迴圈。
2. 跟一般 while 的差別
來回顧一下普通 while 的基本用法:
while (條件)
{
// 迴圈內容
}
如果條件一開始就是假的,內容一次都不會執行!
現在來看 do-while 的例子:
do
{
// 迴圈內容
}
while (條件);
就算條件一開始是假的,內容還是會先執行一次!
直接用程式碼來比較一下:
// 一般 while
int count = 0;
while (count > 0)
{
Console.WriteLine("count = " + count);
count--;
}
// 什麼都不會印出來
// do-while
int count2 = 0;
do
{
Console.WriteLine("count2 = " + count2);
count2--;
}
while (count2 > 0);
// 會印出 "count2 = 0",雖然條件一開始就是假的!
有時候這看起來很怪,但有些情境下這種行為超級有用(像是處理使用者輸入或資料驗證)。
3. do-while 的實用場景
這個迴圈最常出現在哪裡?
資料驗證
最常見的例子——你想讓使用者一定要輸入正確的東西(像只能輸入數字,或密碼至少 6 個字),就會一直問到他輸對為止。
string password;
do
{
Console.Write("請輸入新密碼(至少 6 個字):");
password = Console.ReadLine();
}
while (password.Length < 6);
Console.WriteLine("密碼 OK!");
這個例子裡,迴圈內容至少會跑一次——就算使用者第一次就輸入夠長的密碼。
命令列選單
超常見又實用的 pattern:顯示選單、等使用者輸入指令,只有特定指令才會跳出迴圈。
string command;
do
{
Console.WriteLine("選單:");
Console.WriteLine("1. 顯示歡迎訊息");
Console.WriteLine("2. 離開");
Console.Write("請選擇操作:");
command = Console.ReadLine();
if (command == "1")
{
Console.WriteLine("哈囉,世界!");
}
else if (command != "2")
{
Console.WriteLine("未知指令。");
}
}
while (command != "2");
Console.WriteLine("掰啦!");
4. while 跟其他迴圈的比較
| 迴圈類型 | 條件檢查時機 | 內容可能執行次數 | 適合用在哪 |
|---|---|---|---|
| while | 前 | 0 次或更多 | 重複次數不確定時 |
| do-while | 後 | 1 次或更多 | 至少要執行一次時 |
| for | 前 | 0 次或更多 | 已知要跑幾次時 |
GO TO FULL VERSION