继续使用在switch语句
-
23-09-2019 - |
题
我想从一个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
有效的方法是什么?是由continue
陈述忽略switch
报表? DO 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
从开关内打破循环的进行。
是,继续将switch语句忽略,并且会去循环的条件下进行测试。 我想用里奇分享从C编程语言参考该提取物:
在
continue
语句涉及break
,但通常很少用;它会导致封闭for
,while
,或do
循环开始的下一次迭代。在while
和do
,这意味着测试部件立即执行;在for
,控制传递到步骤增量continue语句仅适用于循环,而不是一个
switch
声明。一个循环内的continue
内部的switch
使下一个循环迭代。强>
我不知道有关用于C ++。
这是语法正确和文体上没问题。
好作风要求每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...
}
...是好的。
虽然在技术上有效的,所有的这些跳晦涩控制流 - 尤其是continue
声明
我会使用这样的特技作为最后的手段,而不是第一个。
如何
while (something = get_something())
{
switch (something)
{
case A:
case B:
do_something();
}
}
这是更短,并以更明确的方式执行它的东西。
切换不被视为循环,使你不能使用继续在开关的情况下语句中......