可以省去do-while循环中的“do”吗?

时间:2013-02-05 08:29:12

标签: c do-while

我正在查看教科书中的一些C代码,它包括这些代码

...
lastsec = get_seconds();
 sec0 = get_seconds(); while (sec0 == lastsec);
...

看起来很像在第二行的末尾缺少do - 但无论如何代码它仍然应该编译。

我正在摸索着这个循环不会仅仅停留在while (sec0 == lastsec);直到时间结束 - 假设get_seconds()没有增加......

这本书是计算机体系结构:定量方法,第五版。 Here's the code on page 134.

4 个答案:

答案 0 :(得分:6)

这不是do-while循环,只是一个空体while循环。在这种情况下,它似乎会导致无限循环或永远不会被执行。

答案 1 :(得分:3)

无限循环或条件第一次失败。

条件中的一个变量可能是volatile并且由其他人(线程,硬件等)异步更新,然后它说:等到条件变为假

否则,拥有这样的循环是没有意义的。

答案 2 :(得分:1)

在C中有2种while循环:

1)

do {.....} while(CONDITION);

2)

while(CONDITION) {........}

while(CONDITION) {........}在某些情况下可以缩减为while(CONDITION)

例如,如果我们想复制char数组,我们可以这样做:

char *SRC="any string";
char DST[10]={0};
char *src = SRC, *dst =DST;
while(*dst++=*src++);

在上面的示例中,srcdst指针会增加,如果*src == null character,则会停止。

答案 3 :(得分:1)

这看起来像是这本书的印刷问题。查看页面,您要求的下面还有2个其他循环,缺少do {。它们甚至具有块的闭合支架但没有相应的开放式支架,并且两次。甚至评论也谈到了循环/* repeat until collect 20 seconds*/

在我看来,打印机吞下了do(可能是打印语言将其作为关键字或类似内容)。

从逻辑的角度来看,它是一个do while();循环。