在 C 或 C++ 中,循环可以同时具有 "do" 和"while"部分吗?

In c or c++ can a loop have both "do" and "while" sections?

本文关键字:do while C++ 循环      更新时间:2023-10-16

给定do ... while循环和while循环中常见的while()语句,以及while循环的主体被替换为do ... while上的分号的位置,就好像它是一个复合语句变成一个空语句(或结束一个长语句的行(:

任何 C 系列语言中的语法是否允许在定义两个主体的情况下进行"do while and while"循环?

据推测,语义将是一个单循环,其中一些操作发生在检查之前,一些操作发生在检查之后。

例如:

do {
foo();
} while ( baz() == true ){
bar();
}

foo()总是会发生一次,但只有在返回 truebar()之后才会发生baz()

它们不能同时使用。 语法为:

(表达式(语句

或:

do 语句 (表达式( ;

因此,您不能像示例中那样执行此操作:

do {
foo();
} while ( baz() == true ){
bar();
}

但你可以接近这个:

do {
foo();
if (!baz()) break;
bar();
} while (1);

你似乎在要求

do
statement0
while (condition)
statement1

这可以通过以下方式实现:

do
{
statement0
if (!(condition)) break;
statement1
} while (1);

在 C 或 C++ 中,循环可以同时包含"do"和"while"部分吗?

任何 C 系列语言中的语法是否允许在定义两个主体的情况下进行"do while and while"循环?

不,您可以有一个 while 循环或 do-while 循环。while 循环与 do-while 循环不同,反之亦然。

不能将两种类型合并在一起。


它只能是一个做同时循环:

do 
{ 
/* statements  */ 
}while(condition);

或 while 循环:

while(condition)
{
/* statements */
};

在 while 循环中,您在某个条件之后执行语句。在 do while 循环中,您至少在循环中运行一次,直到它达到条件。但是两个循环的中心在末尾是相同类型的语句/循环体。因此,增加第二个是没有意义的。


当您使用 do-while 循环时,就像您制作的方式一样:

do {
foo();
} while ( baz() == true ){
bar();
}

在do-while 循环条件之后被{}包围的区域:

{
bar();
}

不是 do-while 循环的一部分。


它将被视为一个单独的范围块中的一堆语句,这些语句将在 do-while-loop 完成/完成后执行。

但即便如此,编译器也只会让这个通过,如果你在 do-while-loop 条件之后设置了分号;

do {
foo();
} while ( baz() == true );{      // Note the semicolon ";".
bar();
}

使用提供的代码:

do {
foo();
} while ( baz() == true ){
bar();
}

编译器将引发错误。

在 C 或 C++ 中不允许在同一循环中同时使用 do 和 while 块。 在任何其他编程语言中也不允许这样做。