Do-while 迴圈
一個 DO-而迴圈是非常相似,而迴圈,但條件是在每個週期結束時檢查,而不是在開始。因此保證迴圈至少執行一次。
以下程式碼將列印 0
,因為條件將在第一次迭代結束時計算為 false
:
int i =0;
do
{
std::cout << i;
++i; // Increment counter
}
while (i < 0);
std::cout << std::endl; // End of line; 0 is printed to the console
注意:不要忘記 while(condition);
末尾的分號,這是 do-while 構造中需要的。
與 do-while 迴圈相反,以下內容不會列印任何內容,因為條件在第一次迭代開始時計算為 false
:
int i =0;
while (i < 0)
{
std::cout << i;
++i; // Increment counter
}
std::cout << std::endl; // End of line; nothing is printed to the console
注意: 使用 break
,goto
或 return
語句可以退出 while 迴圈而不會使條件變為 false。
int i = 0;
do
{
std::cout << i;
++i; // Increment counter
if (i > 5)
{
break;
}
}
while (true);
std::cout << std::endl; // End of line; 0 1 2 3 4 5 is printed to the console
一個簡單的 do-while 迴圈也偶爾用於編寫需要自己範圍的巨集(在這種情況下,從巨集定義中省略了尾隨分號,並且需要由使用者提供):
#define BAD_MACRO(x) f1(x); f2(x); f3(x);
// Only the call to f1 is protected by the condition here
if (cond) BAD_MACRO(var);
#define GOOD_MACRO(x) do { f1(x); f2(x); f3(x); } while(0)
// All calls are protected here
if (cond) GOOD_MACRO(var);