Cprogramming 简明教程

Do-While Loop in C

do-while 循环是最常用的 loops in C 类型之一。 dowhile 关键字一起使用来形成循环。 do-while 是一个退出验证的循环,其中会在执行循环主体后检查测试条件。而 while loop 是一个 entry-verified 。另一方面, for loop 是一个自动循环。

Syntax of do while Loop

C 中 do-while 循环的语法为:

do {
   statement(s);
} while(condition);

How do while Loop Works?

循环结构以关键词 do 开始。然后是大括号内的语句块。 while 关键词紧随右大括号之后。 while 前面有一个括号,其中应该有一个布尔表达式。

现在让我们了解 while 循环是如何工作的。当 C compiler 遇到 do 关键词时,程序控制进入并执行由大括号标记的代码块。当代码块结束时,将评估 while 关键词前面的表达式。

如果表达式为真,则程序控制返回到循环的顶部。如果表达式为假,则编译器停止回到循环块的顶部,并继续执行该块之后的紧邻语句。请注意,while 语句的末尾有一个分号。

Flowchart of do while Loop

以下流程图表示 do-while 循环的工作原理:

cpp do while loop

由于控制循环的表达式是在程序第一次运行循环块之后才进行测试的,因此 do-while 循环被称为“退出验证循环”。此处的关键点是,do-while 循环确保循环至少执行一次。

while 关键词意味着只要表达式为真,编译器就会继续执行随后的块。但是,由于条件位于循环结构的末尾,因此它是在每次迭代之后才进行检查的(而不是像在 while 循环中那样在每次迭代之前进行检查)。

程序无条件地执行其第一次迭代,然后测试条件。如果发现为真,则编译器执行下一次迭代。只要发现表达式为假,循环主体就会被跳过,并且 while 循环之后的第一个语句将被执行。

让我们尝试通过几个示例了解 while 循环的行为。

Example of do while Loop

以下程序打印 Hello world 消息五次。

#include <stdio.h>

int main(){

   // local variable definition
   int a = 1;

   // while loop execution
   do{
      printf("Hello World\n");
      a++;
   } while(a <= 5);
   printf("End of loop");

   return 0;
}

Output

此处,do-while 循环充当一个计数循环。运行代码并检查其输出:

Hello World
Hello World
Hello World
Hello World
Hello World
End of loop

控制重复次数的变量“a”初始化为 1。程序无条件地进入循环,打印消息,将“a”增加 1。

当它到达循环的末尾时,将在 while 语句中测试条件。由于条件“a ⇐ 5”为真,因此程序返回到循环的顶部并重新进入循环。

现在“a”为 2,因此条件仍然为真,因此循环再次重复,并持续到条件变为假。该循环停止重复,并且程序控制转到该块之后的步骤。

现在,将“a”的初始值更改为 10,然后再次运行该代码。它将产生以下输出:

Hello World
End of loop

这是因为程序无条件地进入了循环块。由于 while 关键词之前的条件为假,因此该块不会在下次重复。因此,do-while 循环至少执行一次迭代,因为测试条件位于循环的末尾。出于此原因,do-while 循环被称为“退出验证循环”。

Difference Between while and do while Loops

使用 @ {s0} 和 @ {s1} 构建的循环看起来相似。你可以轻松地将 @ {s2} 循环转换成 @ {s3} 循环,反之亦然。但是,两者之间存在一定的关键差异。

显而易见的语法差异是 do-while 结构以 @ {s4} 关键字开头,并以 @ {s5} 关键字结尾。@ {s6} 循环不需要 @ {s7} 关键字。其次,在 do-while 循环中,你会在 @ {s8} 前面找到分号。while 循环中没有分号。

Example

控制循环的测试条件的位置是两者之间的主要差异。测试条件在 while 循环的开头,而在 do-while 循环中它在末尾。它如何影响循环行为?看看以下代码:

#include <stdio.h>

int main(){

   // local variable definition
   int a = 0, b = 0;

   // while loop execution
   printf("Output of while loop: \n");

   while(a < 5){
      a++;
      printf("a: %d\n", a);
   }

   printf("Output of do-while loop: \n");

   do{
      b++;
      printf("b: %d\n",b);
   } while(b < 5);

   return 0;
}

最初,“a”和“b”初始化为“0”,并且两个循环的输出相同。

Output of while loop:
a: 1
a: 2
a: 3
a: 4
a: 5

Output of do-while loop:
b: 1
b: 2
b: 3
b: 4
b: 5

现在将 @ {s9} 的初始值都更改为 3,然后再次运行该代码。两个循环的输出没有变化。

Output of while loop:
a: 4
a: 5

Output of do-while loop:
b: 4
b: 5

现在将两个变量的初始值都更改为 10,然后再次运行该代码。在这里,你可以观察到两个循环之间的差异:

Output of while loop:

Output of do-while loop:
b: 11

请注意,@ {s10} 循环没有任何迭代,但 @ {s11} 执行其主体一次。这是因为在 @ {s12} 的情况下,循环条件在循环块的顶部进行验证,并且由于条件为假,所以程序不会进入循环。

在 @ {s13} 的情况下,程序无条件地进入循环,将“b”递增到 11,然后不重复,因为条件为假。它表明 @ {s14} 肯定会进行至少一次重复,无论循环变量的初始值如何。

do-while 循环还可以用于构建条件循环。你也可以在 @ {s17} 中使用 @ {s18} 和 @ {s19} 语句。