“while”循环和“do while”循环之间的区别
Posted
技术标签:
【中文标题】“while”循环和“do while”循环之间的区别【英文标题】:Difference between "while" loop and "do while" loop 【发布时间】:2011-04-07 05:56:19 【问题描述】:while循环和do while循环有什么区别。我以前认为两者是完全一样的。然后我遇到了以下代码:
do
printf("Word length... ");
scanf("%d", &wdlen);
while(wdlen<2);
此代码完美运行。它打印字长并检查输入。但是当我把它改成
while(wdlen<2)
printf("Word length... ");
scanf("%d", &wdlen);
它给出一个空白屏幕。它不起作用。因此,两个循环之间存在一些功能差异。谁能解释一下?
这两者还有其他区别吗?
【问题讨论】:
while 循环首先检查条件然后执行.. 但即使条件为假,do-while 也会执行主体至少一次.. 两者都一样坏,因为它们都没有检查scanf()
的返回值。
【参考方案1】:
while
和do-while
循环之间最重要的区别在于,在do-while
中,代码块至少执行一次,即使给定的条件为假。
换一种说法:
虽然 - 您的条件位于循环块的开头,并且可能永远不会进入循环。 在 While 循环中,首先测试条件,如果测试结果为真,则执行代码块。【讨论】:
【参考方案2】:第 1 步中的 while
构造与 do while
之间的区别在于,无论 while()
子句中的条件如何,do
中的任何表达式都将至少运行一次。
println("\nStep 2: How to use do while loop in Scala")
var numberOfDonutsBaked = 0
do
numberOfDonutsBaked += 1
println(s"Number of donuts baked = $numberOfDonutsBaked")
while (numberOfDonutsBaked < 5)
这里是详细解释:Explanation 访问:coderforevers
【讨论】:
【参考方案3】:While 循环:
while(test-condition)
statements;
increment/decrement;
-
降低执行时间和速度
输入条件循环
没有固定的迭代次数
执行 While 循环:
do
statements;
increment/decrement;
while(test-condition);
-
更高的执行时间和速度
退出条件循环
最少一次迭代
在此处了解有关此主题的更多信息:Difference Between While and Do While Loop
这对于 C 编程、Java 编程和其他语言同样有效,因为概念保持不变,只是语法发生了变化。
另外,另一个需要注意的小但不同的因素是 do while 循环在 while 条件的末尾包含一个 分号。
【讨论】:
【参考方案4】:do while(退出检查)和while(进入检查)的区别在于,进入时do while不会检查,而in while会先检查
例子是这样的:
计划 1:
int a=10;
do
System.out.println(a);
while(a<10);
//here the a is not less than 10 then also it will execute once as it will execute do while exiting it checks that a is not less than 10 so it will exit the loop
计划 2:
int b=0;
while(b<10)
System.out.println(b);
//here nothing will be printed as the value of b is not less than 10 and it will not let enter the loop and will exit
输出程序 1:
10
输出程序 2:
[没有打印]
注意:
如果我们指定 a=0 和 b=0 并加上 a++,程序 1 和程序 2 的输出将相同;和 b++;在程序的相应主体中。
【讨论】:
【参考方案5】:在WHILE中先检查条件再执行程序 在 DO-WHILE 循环中首先执行程序至少一次然后检查条件
【讨论】:
晚了 6 年。该问题已有 12 个答案。【参考方案6】:while(wdlen<2)
...
如果 wdlen(假设它是一个堆栈变量)在进入 while 循环之前没有初始化或赋值,它将包含之前内存中该空间中的任何内容(即垃圾)。因此,如果垃圾值
do
...
while(wdlen<2)
将执行一次,然后检查条件以再次运行循环,如果偶然发现未初始化的 wdlen 小于 2,则可能会成功。
【讨论】:
【参考方案7】:在while循环中在执行语句之前测试条件。
在循环内执行语句之后进行条件测试。
【讨论】:
你没看错,但现在回答这个问题可能有点晚了? 可能已经晚了,但我想用一个简单/简短的回答来回答他的问题【参考方案8】:while 在 while 循环中执行 语句 之前测试 条件。
do while在循环内执行语句后测试条件。
来源:让我们 C
【讨论】:
这个问题已经 3 年了,已经有答案了……+1 英雄。【参考方案9】:同时:
入口控制循环
循环执行前检查条件
条件为假时从不执行循环
while 语句末尾没有分号
执行时间:
退出控制循环
在循环结束时检查条件
至少执行一次错误条件,因为稍后会检查条件
while 语句末尾有分号。
【讨论】:
【参考方案10】:在退出控制循环中执行。 while 是一个入口控制循环。
【讨论】:
【参考方案11】:do while 循环在检查 while 条件之前执行一次循环内容。
而 while 循环会在执行内容之前先检查条件。
在这种情况下,您正在使用 scanf() 等待用户输入,它永远不会在 while 循环中执行,因为 wdlen 未初始化并且可能仅包含可能大于 2 的垃圾值.
【讨论】:
"wdlen(假设从 0 开始)并且永远不会 0 谢谢哥们。我明白了。这两者还有什么不同吗? 如果我是编译器并且 wdlen 不会被初始化,我会跳过整个块,因为如果它未定义,它可能总是 > 2。【参考方案12】:Do while 循环将至少执行一次......但是 while 循环将首先检查条件,然后它可能会或可能不会被执行,具体取决于条件。
在您的示例中,wdlen 可能会假定任何大于 2 的垃圾值,因此 while 循环将永远不会被执行。
而 do while 循环将被执行,并会告诉你输入值并在终止条件下检查该值
【讨论】:
【参考方案13】:do
printf("Word length... ");
scanf("%d", &wdlen);
while(wdlen<2);
do-while
循环保证循环至少执行一次,因为它在循环迭代之后检查循环条件。因此它会打印字符串并调用scanf,从而更新wdlen变量。
while(wdlen<2)
printf("Word length... ");
scanf("%d", &wdlen);
对于while
循环,它在执行循环体之前评估循环条件。 wdlen
可能在您的代码中开始时超过 2,这就是您永远不会到达循环体的原因。
【讨论】:
“可能开始时间小于 2”...while(wdlen<2)
...哎呀?【参考方案14】:
不同之处在于条件被评估的时间。在do..while
循环中,直到每个循环结束时才会评估条件。这意味着do..while
循环将始终至少运行一次。在while
循环中,在开始时评估条件。
这里我假设wdlen
在while
循环开始时评估为假(即大于1),因此while 循环永远不会运行。在do..while
循环中,直到第一个循环结束才对其进行检查,因此您会得到预期的结果。
【讨论】:
【参考方案15】:可能wdlen
以 >=2 的值开头,因此在第二种情况下,循环条件最初为 false,并且永远不会进入循环。
在第二种情况下,循环体在第一次检查wdlen<2
条件之前执行,因此printf
/scanf
至少执行一次。
【讨论】:
大于 2,我猜你的意思是? @Stephen: 是的,改变了 :) 嘿,抓得好。您的更改实际上使我在回答中发现了一个错误(我说过“它必须大于 2”!),所以干杯;)。【参考方案16】:While :您的条件位于循环块的开头,并且可能永远不会进入循环。
Do While :您的条件位于循环块的末尾,并且必须至少进入循环一次。
【讨论】:
tnx 以获得良好的回放。只有一个区别??还有其他区别吗?? @AminM 后者需要额外输入两个字符。 虽然有时几乎像 if 一样使用,因为当条件不为真时,循环永远不会进入,而循环内部是处理条件为真直到不再为真的代码。 还有其他编程语言,其中while ... do
也写成while ... do
,但do ... while
写成repeat ... until
。这更符合常见的英语语言。以上是关于“while”循环和“do while”循环之间的区别的主要内容,如果未能解决你的问题,请参考以下文章