在switch语句中继续使用
我想从switch
语句的中间跳转到以下代码中的循环语句:
while (something = get_something()) { switch (something) { case A: case B: break; default: // get another something and try again continue; } // do something for a handled something do_something(); }
这是continue
使用的有效方法吗? switch
语句忽略了continue
语句吗? C和C ++在这里的行为有所不同吗?
没关系, continue
语句和封闭循环相关,你的代码应该等价于(避免这样的跳转语句):
while (something = get_something()) { if (something == A || something == B) do_something(); }
但是,如果你期望break
退出循环,正如你的评论所暗示的那样(它总是用另一个东西再次尝试,直到它的计算结果为false),你将需要一个不同的结构。
例如:
do { something = get_something(); } while (!(something == A || something == B)); do_something();
是的,没关系 – 就像在if
语句中使用它一样。 当然,你不能使用break
来突破交换机内部的一个循环。
它的语法正确和风格上没问题。
良好的风格需要每一种case:
声明应以下列之一结束:
break; continue; return (x); exit (x); throw (x); //fallthrough
另外,下面的case (x):
立即与
case (y): default:
是允许的 – 捆绑几个具有完全相同效果的案例。
其他任何东西都被怀疑是一个错误,就像if(a=4){...}
当然,你需要在循环中( while
, for
, do...while
) continue
工作。 它不会循环回case()
。 但是像这样的构造:
while(record = getNewRecord()) { switch(record.type) { case RECORD_TYPE_...; ... break; default: //unknown type continue; //skip processing this record altogether. } //...more processing... }
…没关系。
虽然技术上有效,但所有这些跳跃都掩盖了控制stream程 – 尤其是continue
声明。
我会用这种伎俩作为最后的手段,而不是第一个。
怎么样
while (something = get_something()) { switch (something) { case A: case B: do_something(); } }
它更短,并以更清晰的方式执行其内容。
是的,继续将被switch语句忽略,并将转到要testing的循环的条件。 我想分享一下来自Ritchie的“C语言编程语言”(C Programming Language Reference)的这篇摘录:“continue语句与break有关,但是用得较less;它导致下一次循环的开始。 while和do,这意味着testing部分立即被执行;在for中,控制转到递增步骤continue语句只适用于循环而不是切换循环内的一个开关继续在下一个循环中导致下一个循环迭代。 “
我不确定C ++。
开关不被认为是循环,所以你不能使用切换case语句中的继续 …