首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从交换机内部打破循环?

如何从交换机内部打破循环?
EN

Stack Overflow用户
提问于 2009-09-14 06:51:09
回答 19查看 136.5K关注 0票数 138

我正在写一些代码,看起来像这样:

代码语言:javascript
复制
while(true) {
    switch(msg->state) {
    case MSGTYPE: // ... 
        break;
    // ... more stuff ...
    case DONE:
        break; // **HERE, I want to break out of the loop itself**
    }
}

有什么直接的方法可以做到吗?

我知道我可以使用一个标志,然后通过在开关后面加上一个有条件的break来中断循环。我只想知道C++是否已经对此进行了一些构造。

EN

回答 19

Stack Overflow用户

发布于 2009-09-14 06:53:41

您可以使用goto

代码语言:javascript
复制
while ( ... ) {
   switch( ... ) {
     case ...:
         goto exit_loop;

   }
}
exit_loop: ;
票数 197
EN

Stack Overflow用户

发布于 2009-09-14 07:41:53

另一种解决方案是将关键字continuebreak结合使用,即:

代码语言:javascript
复制
for (;;) {
    switch(msg->state) {
    case MSGTYPE:
        // code
        continue; // continue with loop
    case DONE:
        break;
    }
    break;
}

使用continue语句结束希望循环继续的每个case标签,并使用break语句结束应终止循环的case标签。

当然,只有在switch语句之后没有要执行的额外代码时,此解决方案才有效。

票数 68
EN

Stack Overflow用户

发布于 2009-09-14 06:56:48

要做到这一点,一种简洁的方法是将其放入函数中:

代码语言:javascript
复制
int yourfunc() {

    while(true) {

        switch(msg->state) {
        case MSGTYPE: // ... 
            break;
        // ... more stuff ...
        case DONE:
            return; 
        }

    }
}

可选的(但“糟糕的做法”):正如已经建议的,你可以使用goto,或者在开关中抛出一个异常。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1420029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档