簡體   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