10

在 C 程序的示例中,我多次遇到这种循环。这些循环到底有什么作用?

do {

    while (...) // Check some condition if it is true.
    { 
        calculation 1
    }

    // Some new condition is checked.

} while(true);

while(true);它用于无限循环有什么需要?有人可以解释一下上述循环的真正作用。我是 C 编程新手

4

8 回答 8

6

当人们想要永远循环并且循环的中断条件未知时使用这些循环。在循环内设置某些条件以及要退出循环的breakreturn语句。例如:

while(true){
    //run this code
    if(condition satisfies)
        break;    //return;
}

这些循环就像任何其他带有停止循环条件的 while 循环一样,它位于 while 循环的主体中,否则它将永远运行(除非需要,否则这不是代码的一部分的意图)。这取决于程序员的逻辑,只取决于他/她想要做什么。

于 2015-05-25T14:07:18.650 回答
1

是的,它用于无限循环,在这种情况下,最佳做法是在某个条件下突破外观

do {

    while () //check some condition if it is true
     { 
     calculation 1
    }

    //some  new condition is checked,if condition met then break out of loop


    } while(true);
于 2013-02-18T10:50:33.277 回答
0

以下循环之间的一般区别因素:

while (condition) {action}
do {action} while (condition)

是前者用于发生次或多次的循环,而后者用于发生一次或多次的循环。

换句话说,条件 forwhile在循环开始时被检查,而 for 则在循环do while结束时被检查。

通常,您会看到开发人员似乎不知道的代码,do-while因为他们会编写:

result = doSomething();
while (result == NOT_FINISHED) {
    result = doSomething();
}

最好写成:

do {
    result = doSomething();
} while (result == NOT_FINISHED);

但是,在您的特定情况下,条件总是true,这并不重要。以下循环基本上是等效1的(用于真实情况):

for (;;) { doSomething(); }
for (;;doSomething());

while (1) { doSomething(); }
do { doSomething(); } while (1);

while (doSomething(),1);

BADPAX: doSomething(); goto BADPAX;

第一个for循环可能是执行无限循环的规范方式,利用这样一个事实,即如果您省略循环的继续条件,它会假定它始终为真。

第二个for循环只是将循环体移动到for语句的每次迭代部分。

while一种有时也出现在野外,但do-while可能较少见。这里唯一的区别是前者循环永远检查循环顶部,后者循环永远检查循环底部。

最后一个while循环以您可能永远不应该使用的方式使用 C 逗号运算符:-)

最后一个现在非常罕见,但可能是他们在机器代码级别上都优化到的。

于 2015-01-22T07:17:29.903 回答
0

在 C 中,所有循环都在条件为真时循环。因此true,条件中的显式实际上意味着“循环true为真”,因此永远循环。

于 2013-02-18T10:51:25.103 回答
0

这个循环是无限的,如果你的程序用这样的 lop 终止,你需要在这样的循环中的给定条件下有一个break或一个return(或在某些情况下抛出异常)语句,否则这样的程序将永远不会终止。

于 2013-02-18T10:52:10.103 回答
0

for如果停止条件的检查既不能在前面(如and while)也不能在后面(如)完成,则无限循环很有用do{}while。相反,您只需永远循环,并且在代码中间您可以检查条件并 break: if(something) break;

于 2013-02-18T10:53:24.590 回答
0

有时我们使用它,例如:

do
     recv(s , &buf, len, flags);
while(true)

winsock windows api的一个例子,通过这种方式你可以从一个端口监听。

于 2013-02-18T11:30:48.083 回答
0
do {
  // code here
} while(true);

此循环无限运行,如果不停止可能会导致运行时错误。如果您正在执行这些类型的循环,请确保在内部有一个 break 语句以确保您的循环将在某个时候停止。

与此类似

if(condition)
   break;

如果您的程序到达某个条件为真的点,它将自动结束 do-while 循环并继续执行之后的代码。

于 2013-09-06T07:24:20.530 回答