While 循环和 For 循环在每次进入循环体之前都要检查进入循环体的条件是否成立,故而循环体有可能一次都不会被执行。而我们下面所要说的 Do While 循环却恰恰相反,它在每次循环体执行完毕后才会检查进入循环体的条件是否成立,这就保证了循环体至少会被执行一次。Do While 循环的结构为:
Do
一条语句/复合语句(即循环体)
While ( Condition );
注意:While ( Condition ); 这里的分号(;)可千万不能省!
Do While 循环的执行过程如下图所示:
第一次进入循环体时,不用先检查 Condition 是否成立,而是马上进入循环体,等循环体执行完毕后才检查 Condition 是否为真,如果为真,则再次执行循环体,反之,则退出循环,转而执行后续的语句。其中,Condition 可以是任何合法的表达式。例如:
#Include <Stdio.H>
#Include <String.H>
#Define NAME "Antigloss"
Int Main(Void)
{
Char Name[20];
Do
{
Printf("Please Guess What''S My Name: ");
Scanf("%19s", Name);
} While ( Strcmp(NAME, Name) );
Printf("Yeah! You Got It!
");
Return 0;
}
上例中,第一次进入循环体时,不需检查 Strcmp(NAME, Name) 是否为真(Strcmp 函数用于判断两个字符串是否相等,如果相等,则返回 0),而是立刻无条件执行循环体:先输出 Please Guess What''S My Name: ,然后等待用户输入(Scanf 函数中的 "%19s" 命令 Scanf 最多把用户输入中的 19 个字符放入数组 Name);循环体执行完后才检测 Strcmp(NAME, Name) 是否为真:如果 NAME 不等于 Name,则 Strcmp 返回非 0(真),再次执行循环体,如果 NAME 等于 Name,则 Strcmp 返回 0(假),退出循环,转而执行后续的语句,即 Printf("Yeah! You Got It!
"); 。由于使用了 Do While 循环,本例中的循环体至少会被执行一次。
当格式限定符为 %S 时,Scanf 在把用户输入读入数组后,会自动在数组中最后一个被读入的字符后面添上 |