使用“while(true){...}”是什么意思?
这是一个无限循环。在每次迭代中,条件将被评估。由于条件是true
,总是......真的......循环将永远运行。退出循环是通过检查循环内部的东西来完成的,然后在必要时打破。
通过在循环内部放置break检查,而不是将其用作条件,这可以让您更清楚地知道,您期待这种检查在发生某些事件之前运行。
这是一个常见的场景,在游戏中;你希望继续处理动作和渲染帧,直到游戏结束。
哦,真的,我猜是的!谢谢。 – trusktr 2010-10-16 00:31:19
while(条件){做函数} 当条件为真..它会做的功能。
所以while(true) 条件总是为真 它会继续循环。
编码将永远不会进行。
编码可能会继续,但不退出循环(比如使用'break'),处理将永远不会在循环之外继续。 – jcolebrand 2010-10-16 00:26:54
我的意思是..如果他不使用任何关键字来打破循环,它将继续循环。 – william 2010-10-16 00:47:13
这只是一个永远不会结束的循环,被称为infinite-loop。 (很多时候,这是一件坏事。)
当它是空的时候,它会无限期地停止程序*;否则通常有一个在环路一些条件,真当,打破循环:
while (true)
{
// ...
if (stopLoop)
break;
// ...
}
这往往比辅助标志清洁:
bool run = true;
while (run)
{
// ...
if (stopLoop)
{
run = false;
continue; // jump to top
}
// ...
}
还要注意一些会建议for (;;)
相反,各种原因。 (也就是说,它可能会摆脱类似于“条件表达总是如此”的警告。)
*在大多数语言中。
这不是一个“停止”,而是“迅速转换到位”。 – 2010-10-16 01:18:07
@Jeremy:很好。 :)除非我将“halt”定义为“不会执行超出'while循环'范围的语句”,否则我会按原样离开我的帖子。 :P – GManNickG 2010-10-16 01:53:00
这是一个永久运行的循环,除非在身体内部有一个break
声明。
不是东西在while
语句中的所有可能的条件下,
// Always tests all conditions in loop header:
while((condition1 && condition2) || condition3 || conditionN_etc) {
// logic...
if (notable_condition)
continue; // skip remainder, go direct to evaluation portion of loop
// more logic
// maybe more notable conditions use keyword: continue
}
有些程序员可能会认为这是更好地把条件throughough逻辑,(即不循环头球攻门稍稍内),并聘请break
声明在适当的地方出去。这种方法通常会否定确定何时离开循环的原始条件(即,而不是何时保持循环)。
// Always tests all conditions in body of loop logic:
while(true) {
//logic...
if (!condition1 || !condition2)
break; // Break out for good.
// more logic...
if (!condition3)
break;
// even more logic ...
}
在现实生活中往往是一个更灰色混合物,所有这些东西的组合,而不是一个极化决定去这种或那种方式。
使用将取决于逻辑的复杂性和程序员的喜好..也许在此线程:)
的接受的答案也不要忘了do
.. while
。最终的解决方案可以使用该版本的while
构造来将条件逻辑扭曲成他们的喜好。
do {
//logic with possible conditional tests and break or continue
} while (true); /* or many conditional tests */
总之,作为一名程序员可以有选择。所以不要忘了感谢你的编译器作者。
我更喜欢'do {...} while(false);';) – jcolebrand 2010-10-16 00:40:02
@drachenstern:很好。 – 2010-10-16 00:42:21
@John K〜Lol,我认为是这样;)...正在等待某人对我上面的加热器评论发表评论:p ~~另外,看看谁试图争论那个会很有趣......会爱知道谁花了不止一遍来弄清楚代码的功能。 – jcolebrand 2010-10-16 00:51:33
当Edsger W. Dijkstra年轻的时候,它等同于:
Do loop initialization
label a:
Do some code
If (Loop is stoppable and End condition is met) goto label b
/* nowadays replaced by some kind of break() */
Do some more code, probably incrementing counters
go to label a
label b:
Be happy and continue
Dijkstra后决定成为Antigotoist和程序员相信成群这样做,一个信仰来了在地球和代码感实性明显。
所以
Do loop initialization
While (true){
some code
If (Loop is stoppable and End condition is met) break();
Do some more code, probably incrementing counters
}
Be happy and continue
取代了憎恶。
对此不满意,狂热分子超过了。一旦证明,递归是更好的,更清晰,更普遍的是循环,而变量只是一个魔鬼般的化身,函数式编程,作为一个梦想,终于成真:
Nest[f[.],x, forever[May God help you break]]
因此,循环递归变得真的不可阻挡,或者至少是不可阻挡的。
真正的要点是,当(真){..}是当退出条件的语义没有强烈的单一偏好,所以它对读者说很好的方式,“好吧,实际上有休息条件A,B ,C ..,但条件的计算过于冗长,因此按照预期的出现概率顺序将它们分别放入内部块中。
因为您希望有一个反复运行的任务,并且没有结束条件,除了程序结束之外。 – HoLyVieR 2010-10-16 00:26:40
它被称为无限循环。也被称为加热器。 – jcolebrand 2010-10-16 00:29:19
什么语言? (这个括号只是增加了足够的字符来使StackOverflow接受评论 - 他们有一个愚蠢的规则,即注释必须超过等号字符。) – 2010-10-16 00:29:40