我正在查看教科书中的一些C代码,它包括这些代码
...
lastsec = get_seconds();
sec0 = get_seconds(); while (sec0 == lastsec);
...
看起来很像在第二行的末尾缺少do
- 但无论如何代码它仍然应该编译。
我正在摸索着这个循环不会仅仅停留在while (sec0 == lastsec);
直到时间结束 - 假设get_seconds()
没有增加......
这本书是计算机体系结构:定量方法,第五版。 Here's the code on page 134.
答案 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++);
在上面的示例中,src
和dst
指针会增加,如果*src == null character
,则会停止。
答案 3 :(得分:1)
这看起来像是这本书的印刷问题。查看页面,您要求的下面还有2个其他循环,缺少do {
。它们甚至具有块的闭合支架但没有相应的开放式支架,并且两次。甚至评论也谈到了循环/* repeat until collect 20 seconds*/
在我看来,打印机吞下了do
(可能是打印语言将其作为关键字或类似内容)。
从逻辑的角度来看,它是一个do while();
循环。