0

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

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

看起来do第二行末尾缺少 a ——但无论如何它仍应编译代码。

我正在为这个循环如何不只是停留在while (sec0 == lastsec);时间结束而摸​​不着头脑 - 假设它get_seconds()没有增加......

这本书是计算机体系结构:一种定量方法,第五版。 这是第 134 页上的代码。

4

4 回答 4

6

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

于 2013-02-05T08:30:14.013 回答
3

它要么是无限循环,要么是条件第一次失败。

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

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

于 2013-02-05T08:35:35.203 回答
1

在 C 中有两种 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++);

在上面的示例中,srcanddst指针递增,如果*src == null character.

于 2013-02-05T08:32:37.333 回答
1

好像是书的印刷问题。查看页面,在您要求的下面还有 2 个其他循环,其中do {缺少 。他们甚至有块的右括号,但没有相应的左括号,而且是两次。甚至评论都在谈论循环/* repeat until collect 20 seconds*/

在我看来,打印机吞下了dos (可能是打印语言将它作为关键字或类似的东西)。

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

于 2013-02-05T11:08:43.730 回答