是否有可能在c ++中有一个while循环,使得检查在循环的中间而不是开始或结束?

StackOverflow https://stackoverflow.com/questions/1807110

我想让while循环执行类似下面的操作,但这在c ++中是否可行?如果是这样,语法如何?


do {
    //some code
    while( expression to be evaluated );
    // some more code
}

我希望一旦while语句决定表达式不再为真,就要退出循环(即如果表达式为false,//则不执行更多代码)

有帮助吗?

解决方案

你可以这样做:

while (1) {
   //some code
   if ( condition) {
       break;
   }
   // some more code
}

其他提示

一点背景和分析:你所要求的我称之为“ Dahl loop ,以Simula成名的Ole-Johan Dahl命名。正如Sean E.所说,C ++没有它们(ima的答案放在一边),尽管其他一些语言(尤其是Ada)。它可以代替“do-while”。和“while-do”循环,这使它成为一个有用的结构。更一般的情况允许任意数量的测试。虽然C ++没有Dahl循环的特殊语法,但Sean McCauliff和AraK的答案完全等同于它们。 “while(true)”是指“while(true)”。循环应该由编译器转换为简单的跳转,因此编译的版本与假设的Dahl循环的编译版本完全无法区分。如果您发现它更具可读性,您也可以使用

do {
    ...
} while (true);

好吧,我认为你应该把条件移到循环的中间(?):

while (true)
{
  ...
  // Insert at favorite position
  if (condition)
    break;
  ...
}

技术上,是的:

 for ( ;CodeBefore, Condition; ) {CodeAfter}

答案是否定的,当while语句应该评估的条件为真时,你不能让你的循环自动终止,直到它在循环的顶部(或底部)实际评估它为止。 while语句不能放在循环的中间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top