题 “while”循环和“do while”循环之间的区别


while循环和while循环之间有什么区别。我曾经认为两者完全相同。然后我遇到了以下一段代码:

do {
        printf("Word length... ");
        scanf("%d", &wdlen);
    } while(wdlen<2);

这段代码完美无缺。它打印字长和tascans输入。但是当我改变它

while(wdlen<2){
        printf("Word length... ");
        scanf("%d", &wdlen);
    } 

它给出了一个空白屏幕。它不起作用。因此两个循环之间存在一些功能差异。任何人都可以解释一下吗?提前致谢。

编辑:这两个有什么不同吗?


28
2017-09-02 09:27


起源


while循环最初检查条件然后执行..但do-while执行一次至少一次,即使条件为false。 - Raghu Srikanth Reddy
两者都同样被打破,因为它们都没有检查返回值 scanf()。 - Nisse Engström


答案:


做的 在检查while的条件之前,循环执行循环的内容。

而a  循环将在执行内容之前首先检查条件。

在这种情况下,您正在等待用户输入scanf(),它将永远不会在  循环为wdlen未初始化,可能只包含一个可能大于2的垃圾值。


52
2017-09-02 09:28



“wdlen(假设从0开始)并且永远不会<2” - 回到我的数学课上我被教导0 <2 ;-) - Péter Török
0 <= = = false?你确定? - Joost
但可以肯定的是 0<2! - James
谢谢哥们。我明白了这两个有什么不同吗? - narayanpatra
如果我是一个编译器并且wdlen不会被初始化,我会跳过整个块,因为如果它未定义它也可能总是> 2。 - AndreKR


 :你的情况是在循环块的开头,并使之成为可能 永远不要进入循环

做的 :你的情况是在循环块结束时,并且是强制性的 进入循环至少一次


15
2017-09-02 09:29



tnx for good replay.There只有一个区别??还有其他区别吗? - AminM
@AminM后者需要输入两个额外的字符。 - Duncan Whyte


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个以上开始,这就是你永远不会到达循环体的原因。


3
2017-09-02 09:33



“可能从不到2开始......” while(wdlen<2)......哎呀? - Stephen
哎呀,我的朋友。 - Mahmoud


在退出控制循环中执行。 while是一个入口控制循环。


2
2018-03-19 04:29





区别在于评估条件的时间。在一个 do..while 循环,直到每个循环结束才评估条件。这意味着一个 do..while 循环会 总是 至少运行一次。在一个 while 循环,在开始时评估条件。

在这里我假设 wdlen 在开头评估为假(即,它大于1) while 循环,所以while循环永远不会运行。在里面 do..while 循环,直到第一个循环结束才会检查它,所以你得到你期望的结果。


1
2017-09-02 09:30





做的 循环将至少执行一次.......但是  循环将首先检查条件,然后根据条件可能会或可能不会执行。

在您的示例中,wdlen可能会假设任何大于2的垃圾值  循环永远不会被执行。

做的 循环将被ececuted并将告诉你输入值并在终止条件中检查该值


1
2017-09-02 10:47





而:

  1. 进入控制循环

  2. 在循环执行之前检查条件

  3. 如果condition为false,则永远不执行循环

  4. while语句结束时没有分号

DO-同时:

  1. 出口控制回路

  2. 在循环结束时检查条件

  3. 由于稍后检查条件,因此至少执行一次错误条件

  4. 在while语句结束时有分号。


1
2018-04-22 13:04





大概 wdlen 以值> = 2开始,因此在第二种情况下,循环条件最初为假,并且永远不会输入循环。

在第二种情况下,循环体在之前执行 wdlen<2 条件是第一次检查,所以 printf/scanf 至少执行一次。


0
2017-09-02 09:29



大于2,我猜你的意思是? - Stephen
@Stephen:是的,改变了:) - sth
嘿,好好抓住了。你的改变实际上让我在我的回答中发现错误(我曾说过“它必须大于2”!),所以欢呼;)。 - Stephen


while循环将至少执行一次.......但是while循环将首先检查条件然后根据条件可能会执行或不执行。  同时:您的条件位于循环块的开头,并且可以永远不进入循环。

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


0
2018-04-11 04:30