如何从if语句中“打破”?
我有一个如果我要“打破”的声明。 我明白,rest只是为了循环。 谁能帮忙?
对于那些需要我想要做的事情的例子:
if( color == red ) { ... if( car == hyundai ) break; ... }
嵌套ifs:
if (condition) { // half-massive amount of code here if (!breakOutCondition) { //half-massive amount of code here } }
面临被低估的风险 – 过去发生在我身上 – 我会提到另一个(不受欢迎的)选项当然是可怕的goto
; rest声明只是变相的转折。
最后,我会回应一下你的devise可能会有所改进的普遍情绪,以便大量的if语句不是必须的,更不用说打破它了。 至less你应该能够提取几个方法,并使用返回:
if (condition) { ExtractedMethod1(); if (breakOutCondition) return; ExtractedMethod2(); }
if (test) { ... goto jmp; ... } jmp:
哦,为什么不:)
你可能需要把你的if语句分解成更小的部分。 这就是说,你可以做两件事情:
-
把声明包装成
do {} while (false)
并使用realbreak
(不推荐!!!巨大的kludge !!!) -
把语句放到它自己的子程序中并使用
return
这可能是改进代码的第一步。
除非你使用goto,否则你不能打破if语句。
if (true) { int var = 0; var++; if (var == 1) goto finished; var++; } finished: printf("var = %d\n", var);
这会给“var = 1”作为输出
总是有一个goto
语句 ,但我会build议嵌套一个if
与破坏条件的逆。
你可以使用标签和goto
,但这是一个不好的破解。 你应该考虑移动if语句中的一些东西来分离方法。
||
和&&
运算符是短路的,所以如果||
的左侧 评估为true
或左侧&&
评估为假,右侧将不被评估。 这相当于rest。
有一个标签 ,你想跳转到一边,如果使用goto
if(condition){ if(jumpCondition) goto label } label:
你可以使用goto
, return
,也可以调用abort ()
, exit ()
等
我不知道你的testing条件,但一个好的旧switch
可以工作
switch(colour) { case red: { switch(car) { case hyundai: { break; } : } break; } : }