我想从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++在行为上有区别吗?
发布于 2010-01-27 20:34:22
这很好,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();
发布于 2010-01-27 20:26:13
是的,它很好-就像在if
语句中使用它一样。当然,您不能使用break
从交换机内部中断循环。
发布于 2010-01-27 21:00:27
它在语法上是正确的,在风格上也是正确的。
好的风格要求每条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...
}
好的,...is。
https://stackoverflow.com/questions/2146763
复制相似问题