繁体   English   中英

切换到默认情况

[英]Switch to default case in switch-case

当我遇到大小写1/2 / etc时,是否可以使用默认大小写?

switch(num) {
    case 1:
        if(foo) {
            //do something
        } else {
            //go to default
        }

        ...
        ...
        ...

    default:
        //do something
}

即使在switch时更改了num值,比较的值也是切换开始的变量值,因此,如果您输入了case分支之一,则无法再次输入default

但是你可以做类似的事情

boolean doDefault = false;
switch(num) {
    case 1:
        if(foo) {
            ...
        }
        else {
            doDefault = true;
        }
        break;
}

if(doDefault) {
    //do something
}

您可以编写应该​​在函数的default块中发生的逻辑,并在必要时调用它:

void defAction(){
    printf("Hello, World!\n");
}

int main() {

    int num = 1, foo = 0;

    switch(num) {
        case 1:
            if(foo) {
                printf("Goodbye, World!\n");
            } else {
                defAction();
            }
            break;
        default:
            defAction();
    }

    return 0;
}

请记住,如果一个案例不使用break; ,它下面的所有情况(包括default )也会被调用。 这样,如果只中断了if(foo)开关,它将继续使用default 仅当您想从不超过一种case跳转到default ,这才真正有用,在这种情况下,您要将该case放在default之前,放在最后。

谨慎使用/请参阅下面的评论

switch(num) {
    case 2:
        // do sth
        break;
    case 3:
        // do sth
        break;
    case 4:
        // do sth
        break;
    case 1:
        if(foo) {
            printf("Goodbye, World!\n");
            break;
        }
        // ELSE don't break, use default
    default:
        defAction();
}

不可能,在实时应用程序或任何用例中都没有意义,但是如果您要默认使用,则可以通过以下任何一种方式来实现:

  1. 删除所有中断,以免最终出现缺损。
  2. 调用goDefault()方法,该方法的值与任何case都不匹配。

有可能做一个方法

switch(num) {
    case 1:
        if(foo) {
            //do something
        } else {
            foo();
        }
    default:
        foo();
    }

不,您不能,但是您可以调用相同的方法或忽略中断。

您可以将它们放在默认值之前,并且不要在大小写结束时刹车,然后无论情况如何,它将在中断之前执行所有语句

您可以通过以下方式实现此目的。

假设只需要在案例1,2,8之后使用默认案例,那么您可以编写以下代码。

 switch(Choice){
    case 1 : //do something
    case 2 : //do something
    case 8 : //do something
    default: //to do default operation   
    break;
    case 3 : 
    case 4 : 
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM