我如何“打破”if语句?

时间:2011-12-15 16:41:49

标签: c++

我有一个if语句,我想“打破”出来。我知道休息只是为了循环。有人可以帮忙吗?

对于那些需要我正在尝试做的例子的人:

if( color == red )
{
...
if( car == hyundai ) break;
...
}

10 个答案:

答案 0 :(得分:59)

嵌套ifs:

if (condition)
{
    // half-massive amount of code here

    if (!breakOutCondition)
    {
        //half-massive amount of code here
    }
}

冒着被贬低的风险 - 过去发生在我身上 - 我会提到另一个(不受欢迎的)选择当然是可怕的goto;休息声明只是伪装的转折。

最后,我会回应普遍的看法,即你的设计可能会得到改善,因此不需要大量的if语句,更不用说打破它了。至少你应该能够提取几个方法,并使用return:

if (condition)
{
    ExtractedMethod1();

    if (breakOutCondition)
        return;

    ExtractedMethod2();
}

答案 1 :(得分:37)

if (test)
{
    ...
    goto jmp;
    ...
}
jmp:

哦,为什么不:)

答案 2 :(得分:20)

您可能需要将if语句分解为更小的部分。话虽这么说,你可以做两件事:

  • 将语句包装到do {} while (false)并使用真实的break(不推荐!!!巨大的kludge !!!)

  • 将语句放入自己的子例程并使用return这可能是改进代码的第一步。

答案 3 :(得分:3)

除非使用goto,否则不能打破if语句。

if (true)
{
      int var = 0;
      var++;
      if (var == 1)
          goto finished;
      var++;
}

finished:
printf("var = %d\n", var);

这会将“var = 1”作为输出

答案 4 :(得分:2)

总是有一个goto statement,但我建议将if嵌套在一个违反条件的倒数处。

答案 5 :(得分:2)

您可以使用标签和goto,但这是一个糟糕的黑客。您应该考虑将if语句中的一些内容移动到单独的方法中。

答案 6 :(得分:2)

||&&运算符是短路的,因此如果||的左侧评估为true&&的左侧评估为错误,右侧不会被评估。这相当于休息。

答案 7 :(得分:2)

如果要使用转到

,请在要跳转的位置加上标签
if(condition){
     if(jumpCondition) goto label
}
label:

答案 8 :(得分:1)

您可以使用gotoreturn,也可以致电abort ()exit ()等。

答案 9 :(得分:1)

我不知道你的测试条件,但是一个好的旧switch可以工作

switch(colour)
{
  case red:
  {
    switch(car)
    { 
      case hyundai: 
      {
        break;
      }
      :
    }
    break;
  }
  :
}