“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】:

whiledo-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】:

whilewhile 循环中执行 语句 之前测试 条件

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&lt;2)...哎呀?【参考方案14】:

不同之处在于条件被评估的时间。在do..while 循环中,直到每个循环结束时才会评估条件。这意味着do..while 循环将始终至少运行一次。在while 循环中,在开始时评估条件。

这里我假设wdlenwhile 循环开始时评估为假(即大于1),因此while 循环永远不会运行。在do..while 循环中,直到第一个循环结束才对其进行检查,因此您会得到预期的结果。

【讨论】:

【参考方案15】:

可能wdlen 以 >=2 的值开头,因此在第二种情况下,循环条件最初为 false,并且永远不会进入循环。

在第二种情况下,循环体在第一次检查wdlen&lt;2条件之前执行,因此printf/scanf至少执行一次。

【讨论】:

大于 2,我猜你的意思是? @Stephen: 是的,改变了 :) 嘿,抓得好。您的更改实际上使我在回答中发现了一个错误(我说过“它必须大于 2”!),所以干杯;)。【参考方案16】:

While :您的条件位于循环块的开头,并且可能永远不会进入循环

Do While :您的条件位于循环块的末尾,并且必须至少进入循环一次

【讨论】:

tnx 以获得良好的回放。只有一个区别??还有其他区别吗?? @AminM 后者需要额外输入两个字符。 虽然有时几乎像 if 一样使用,因为当条件不为真时,循环永远不会进入,而循环内部是处理条件为真直到不再为真的代码。 还有其他编程语言,其中while ... do也写成while ... do,但do ... while写成repeat ... until。这更符合常见的英语语言。

以上是关于“while”循环和“do while”循环之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

00013_循环语句do...while

C语言 do while 和 while 循环

循环语句--do...while

JS中 do while循环问题

循环(while,do...while)

do-while循环结构