C ++ Switch()Bug

时间:2018-02-03 01:58:38

标签: c++ switch-statement

我一直在开发一个使用switch()函数的项目,如下所示:

switch (selectedMenu) {
    case 1:
        switch (selectedIndex) {
            case 0:
                invisibility = !invisibility;
                break;
            case 1:
                invincibility = !invincibility;
                break;
            case 2:
                superjump = !superjump;
                break;
            case 3:
                //Option 4
                break;
            case 4:
                //Option 5
                break;
        }
    case 2:
        switch (selectedIndex) {
            case 0:
                //Option 2
                break;
            case 1:
                //Option 2
                break;
            case 2:
                //Option 3
                break;
            case 3:
                //Option 4
                break;
            case 4:
                //Option 5
                break;
        }
    case 3:
        switch (selectedIndex) {
            case 0:
                //Option 2
                break;
            case 1:
                //
                break;
            case 2:
                //Option 3
                break;
            case 3:
                //Option 4
                break;
            case 4:
                //Option 5
                break;
        }
    case 4:
        switch (selectedIndex) {
            case 0:
                //Option 2
                break;
            case 1:
                //Option 2
                break;
            case 2:
                //Option 3
                break;
            case 3:
                //Option 4
                break;
            case 4:
                //Option 5
                break;
        }
    case 5:
        switch (selectedIndex) {
            case 0:
                //Option 2
                break;
            case 1:
                SET_ENTITY_COORDS(pedID, -75.015, -818.215, 326.176);
                break;
            case 2:
                //Option 3
                break;
            case 3:
                //Option 4
                break;
            case 4:
                //Option 5
                break;
        }
}

我的代码遇到了错误。

问题

case 5 -> case 1中有这一行:SET_ENTITY_COORDS(pedID, -75.015, -818.215, 326.176);,它应该将实体传送到某个位置。当我在这个传送案例上面的任何一个案例中使用一个选项时,它将传送实体,即使它不属于这种情况。

这很难解释,所以让我们画一幅画:

enter image description here

如何调整此值以便它只启用我在案例中指定的功能而不是它上面的所有功能?

(我如何调整它以便它只启用superjump而不是superjump和传送用户?)

2 个答案:

答案 0 :(得分:5)

您的外break个案件需要switch个陈述:

switch (selectedMenu) {
    case 1:
        switch (selectedIndex) {
            // blah, blah, blah...
        }
        break;      // <-- this
    case 2:
        switch (selectedIndex) {
            // blah, blah, blah...
        }
        break;      // <-- this
    case 3:
        switch (selectedIndex) {
            // blah, blah, blah...
        }
        break;      // <-- this
    case 4:
        switch (selectedIndex) {
            // blah, blah, blah...
        }
        break;      // <-- this
    case 5:
        switch (selectedIndex) {
            // blah, blah, blah...
        }
        break;      // <-- this
}

答案 1 :(得分:3)

Michael Burr已经说过要解决问题需要做些什么,但代码中发生的事情是switchC语句中C++语句的自然设计。 break是指如果您不在continue部分的函数中使用条件:returncasefall-through,则代码将case 1}}到下一个switch( idx ) { case 1: { // some code } case 2: { // some code continue; } case 3: { // some code break; } case 4: { // some code return statement; } } 语句。

简单示例:

case 1

在上面的代码示例中,continue不使用此switch语句所在的函数中的breakreturncase 1。那么这里会发生什么呢?遇到case 1它将执行case 2代码块中的代码,然后它会检查Case 2case 3将继续执行,case 4将突破switch语句,.no-style{ text-decoration:none!important; } .nav-tabs { background-color:#333; border-bottom: 2px solid #DDD; } .nav-tabs > .nav-item > .nav-link.active, .nav-tabs > .nav-item > .nav-link.active:focus, .nav-tabs > .nav-item > .nav-link.active:hover { border-width: 0; } .nav-tabs > .nav-item > .nav-link { border: none; color: rgba(255,255,255,.6); } .nav-tabs > .nav-item > .nav-link.active, .nav-tabs > .nav-item > .nav-link:hover { border: none; color: rgba(255,255,255,1); background: transparent; } .nav-tabs > .nav-item > .nav-link::after { content: ""; background: #4285F4; height: 2px; position: absolute; width: 100%; left: 0px; bottom: -1px; transition: all 250ms ease 0s; transform: scale(0); } .nav-tabs > .nav-item > .nav-link.active::after, .nav-tabs > .nav-item:hover > .nav-link::after { transform: scale(1); }将直接从函数返回。 switch-case语句的这些相同特性也适用于嵌套的switch语句。