如何在没有得到的情况下重写(干净利落)?

Jar*_*tar 4 c goto control-flow

如何在没有得到的情况下干净利落地做到这一点?

loop:
  if(condition1){
    something();
  } else if (condition2) {
    somethingDifferent();
  } else {
    mostOfTheWork();
    goto loop;
  }
Run Code Online (Sandbox Code Playgroud)

我也不想使用休息时间.此外,在做其他事情之前,预计会循环几次(adv 40次),因此即使只是为了可读性,最多的工作部分很可能会尽可能高.提前致谢.

编辑:这是在错误的观念下发布的,编译器优化器在休息时效果很差,虽然开始时通常很愚蠢,但我通过实验(性能)证明我自己是不正确的.另一方面,谢谢你的答案; 他们对各种风格的阅读都很有趣.

tpd*_*pdi 10

bool done = false ;

while( !done ) {
  if(condition1){
    something();
    done = true ;
  } else if (condition2) {
    somethingDifferent();
    done = true ;
  } else {
    mostOfTheWork();
  }
} 
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohm 10

很明显,如果任何一个条件触发,你将突破循环.

    while ((!condition1) && (!condition2)) {
      MostOfTheWork();
    }
    if (condition1) {
      something();
    } else if (condition2) {
      somethingDifferent();
    }
Run Code Online (Sandbox Code Playgroud)

因此,循环虽然两个条件都没有被触发,然后看看哪一个让你.

现在,有人会尖叫我评估的条件超出了我的需要.为了他们的利益,修改后的版本:

{
  bool t1, t2;
  while ((!(t1 = condition1)) && (!(t2 =condition2))) {
    MostOfTheWork();
  }
  if (t1) {
    something();
  } else if (t2) {
    somethingDifferent();
  }
}
Run Code Online (Sandbox Code Playgroud)