1. 程式人生 > >C++中switch case 中定義變數

C++中switch case 中定義變數


在C++中switch case中定義變數


1.   

int n = 3;

//程式碼1

switch (n)
    {
    case 2:
        int y = 4;
        cout << y << endl;
        break;
    case 3:
        int z = 5;
        cout << z << endl;
        break;
    }

報錯資訊:error C2360: “y”的初始化操作由“case”標籤跳過

這是因為可能出現在case 2中定義了,但是在case 3中使用了(當然,我們沒在case3中使用了,但編譯器認為這種可能會發生),但程式執行的跳過了case 2,執行的是case 3,這個時候在case 3中使用y相當於使用了一個沒有定義的變數,相當於出現這種程式碼:
//程式碼2

int n = 3;
    switch (n)
    {
    case 2:
        int y = 4;
        cout << y << endl;
        break;
    case 3:
        cout << y << endl;
        break;
    }

程式碼2中的case 3沒有報錯,原因是在case 3,int z的作用域在它的下面都可以使用,不存在作用域的問題。


解決辦法:

1.在switch上面定義變數

2.在case中加上大括號,限定變數的作用域


//程式碼3

    int n = 3;
    switch (n)
    {
    case 2:
        {
            int y = 3;
            cout << y << endl;
        }    
        break;
    case 3:
        cout << n << endl;
        break;
    }

3.先定義,在賦值


//程式碼4

    int n = 3;
    switch (n)
    {
    case 2:
        int y;
        y = 3;
        cout << y << endl;
        break;
    case 3:
        cout << n << endl;
        break;
    }
   

//程式碼5

    int n = 3;
    switch (n)
    {
        int y = 3;
    case 2:
        cout << y << endl;
        break;
    case 3:
        cout << n << endl;
        break;
    }

在這裡兩個case語句都有報錯,“y”的初始化操作由“case”標籤跳過。程式碼4中按理來說y的已經定義並初始化了,且這個int y=3,這句不存在不跳過的可能。報錯原因不明。