我想从一个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,但通常很少用;它会导致封闭forwhile,或do循环开始的下一次迭代。在whiledo,这意味着测试部件立即执行;在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工作循环(fordo...whilecontinue)。它不会回送独自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();
    }        
}

这是更短,并以更明确的方式执行它的东西。

切换不被视为循环,使你不能使用继续在开关的情况下语句中......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top