【发布时间】:2014-01-11 04:32:14
【问题描述】:
我想知道,除了使用 do-while 循环之外,什么是等效的 for 循环或 c 中的任何其他循环组合?
【问题讨论】:
-
你怎么看? do-while(与直接
while相比)的主要问题是循环总是至少迭代一次。
我想知道,除了使用 do-while 循环之外,什么是等效的 for 循环或 c 中的任何其他循环组合?
【问题讨论】:
while 相比)的主要问题是循环总是至少迭代一次。
没有其他循环至少执行一次循环内容,就像 do-while 那样。当然你可以用一个标志和一个while循环来模拟do-while:
do {
A;
} while (B)
变成
int flag=1;
while (flag || B) {
flag=0;
A;
}
但这并不是真正的替代方案,它只会掩盖你的初衷。
【讨论】:
任何类型的循环都可以由无限“永远”循环和条件break 语句的组合构成。
例如转换
do {
<action>
} while (<condition>);
到for 循环,你可以这样做:
for (;;) {
<action>
if (!<condition>) break;
}
您可以使用相同的技巧将do/while 循环转换为while 循环,如下所示:
while (true) {
<action>
if (!<condition>) break;
}
此外,根本不需要循环:上面的任何一个都可以用顶部的标签和底部的goto 建模;这是在汇编语言中进行循环的常用方法。最初将三个循环结构引入语言的唯一原因是为了让语言更具表现力:do/while 循环比上面显示的任何替代方案都更好地实现了作者的想法。
【讨论】:
以下三个循环都是等价的:
#define FALSE (0)
#define TRUE (!(FALSE))
do
{
status = getStatus();
}
while(status == TRUE);
status = TRUE;
while(status == TRUE)
{
status = getStatus();
}
for(status = TRUE; status == TRUE; status = getStatus())
{
}
【讨论】:
status,而不是status == true。
while(status) 肯定看起来更好。
status = TRUE;(而不是true)之前的分配吗?