在C程序的例子中,很多次我遇到过这种循环。这些循环真正做了什么?
do {
while (...) // Check some condition if it is true.
{
calculation 1
}
// Some new condition is checked.
} while(true);
while(true);
需要什么?是否用于无限循环?有人可以解释上面的循环真正做了什么。我是C编程的新手
答案 0 :(得分:6)
当想要永远循环并且循环中的分解条件未知时,使用这些循环。 Certiain条件在循环内设置,并且中断或返回语句从循环中出来。 例如:
while(true){
//run this code
if(condition satisfies)
break; //return;
}
这些循环就像任何其他循环一样,具有停止循环的条件的循环位于while循环的主体中,否则它将永远运行(在需要之前,这绝不是代码的一部分)。 这取决于程序员的逻辑,只取决于他/她想做什么。
答案 1 :(得分: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);
答案 2 :(得分:0)
在条件为真时,在C all循环中循环。因此,条件中的显式true
实际上意味着“true
为真时循环”,因此永远循环。
答案 3 :(得分:0)
这个循环是无限的,如果你的程序要用这样的lop终止,你需要在给定条件下有break
或return
(或者在某些情况下抛出异常)语句在这样的循环中,否则这样的程序永远不会终止。
答案 4 :(得分:0)
如果停止条件的检查既不能在前面(如for
和while
)也不能在后面(与do{}while
一样),则无限循环很有用。相反,你只需要永远循环,在代码中间你可以检查条件并中断:if(something) break;
。
答案 5 :(得分:0)
有时我们会使用它,例如:
do
recv(s , &buf, len, flags);
while(true)
来自winsock windows api的示例,通过这种方式,您可以从端口收听。
答案 6 :(得分:0)
do {
// code here
} while(true);
此循环无限运行,如果未停止,可能会导致运行时错误。如果你正在进行这种循环,请确保在内部有一个break语句,以确保你的循环在某个时刻停止。
与此相似
if(condition)
break;
如果您的程序达到条件为真的某个点,它将自动结束do-while循环并在此之后继续执行代码。
答案 7 :(得分:0)
以下循环之间的一般区别因素:
while (condition) {action}
do {action} while (condition)
前者用于发生零或更多次的循环,而后者用于发生一次或更多次的循环。
换句话说,在循环开始时检查while
的条件,对于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逗号运算符: - )
现在最后一个非常罕见,但很可能它们都在机器代码级别进行优化。