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);