switch (i)
    {
        case 1:
            cout << "i is equal to 1" << endl;
            break;
        case 2:
            cout << "i is equal to 2" << endl;
            break;
        case 3:
            
            cout << "i is equal to 3" << endl;
            int j = i + 1;
            cout << "j = " << j;
            break;
            
        default:
            cout << "i is not equal to 1, 2, or 3." << endl;
            break;
    }变量在最近的一个{}中有效,那么上面这样做没有什么不合适的啊?
我就是想让一个变量在switch中有效,在switch后无效。
为什么非要在case3之间再加个{}警告才会消失?

解决方案 »

  1.   

    要在switch里使用,放在case 3的执行代码中肯定不行。而且你加了括号之后,只能在case 3一种条件下使用,其他不认识
      

  2.   

    编译器把你的一个case当成一块,所以若是在其中有变量定义的话会给出警告:本变量只在本case中可用
      

  3.   

    很正常,因为程序不一定能运行到那个地方。改成这样就可以了:
    case 3:
    {
                cout << "i is equal to 3" << endl;
                int j = i + 1;
                cout << "j = " << j;
    }
    break;
      

  4.   

    如果是因为程序也许运行不到 3 的这种情况 所以编译器给了个警告
    那么,为什么加了一个{}
    case 3:
    {
      cout << "i is equal to 3" << endl;
      int j = i + 1;
      cout << "j = " << j;
    }
    就没有警告了呢?
    加了{},case 3的情况还是不一定能运行到。
      

  5.   

    加了{}表示:只有当程序运行到这个case了,才会从栈上申请局部变量的空间并初始化,运行不到就不分配空间,避免浪费
      

  6.   

    switch中不能定义变量,除非有大括号括起来
      

  7.   

    C和C++不同,C要求先定义,C++是随用随定义。所以会有以上问题。除了加{},你也可以把变量放switch前。
      

  8.   

    int j = i + 1;这有问题,把int j提到最前面定义,不要在case中定义
      

  9.   

    在switch中定义变量本来就不是一个好做法