我有一个if语句,我想“打破”出来。我知道休息只是为了循环。有人可以帮忙吗?
对于那些需要我正在尝试做的例子的人:
if( color == red )
{
...
if( car == hyundai ) break;
...
}
答案 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)
您可以使用goto
,return
,也可以致电abort ()
,exit ()
等。
答案 9 :(得分:1)
我不知道你的测试条件,但是一个好的旧switch
可以工作
switch(colour)
{
case red:
{
switch(car)
{
case hyundai:
{
break;
}
:
}
break;
}
:
}