关于switch...case...语句 (Compiler Error C2360)

 

大多数书上的例子都是一些一些算数表达式,然后case里面接的也就是一句printf或者cout,给人的感觉很弱智。后来才发现能够接多条语句。而且根据一些说明,是不用加括号的。也就是说一个case后面的语句不论是一条语句还是复合语句还是多条语句,break之前都不用加括号。

一开始我试的时候的确能用,但是我用C++编程序的时候写的for循环里面的循环变量总是出错。也就是for(int i=0; ... ; ...)总是报错。Compiler Error C2360. initialization of 'identifier' is skipped by 'case' label

即定义的被case语句跳过,当初碰到这个问题的时候时间比较紧,就把循环变量放到了switch外面去定义了。能暂时解决问题,但是总感觉不好。今天又碰到这个问题,又有时间就查了下,有人说是定义不能在switch里面。

先给出例子:

switch(x)  
  {  
  case   1:  
  {  
           int   a   =   x;         //这里加了大括号,pass  
           break;  
  }  
   
  case   2:  
  {  
          int   b   =   x;         //这里没加大括号,failed,不过把case   3去掉也success  
          break;  
  }  
  case   3:  
  break;                    
  }  

也就是说正常情况下能够不加大括号。然而定义变量就会被报Compiler Error C2360

的错误。加了大括号之后,变量在里面就能够正常编译。

一些网友给出的解释是:一般来说,不要把变量的定义放在case中,特别是后面要用到的变量。如果switch中没有执行到这个case分支,这个变量就会没有定义。C2360是编译器对这类错误给出的提示。  

   
  在{}中的变量的定义因为其scope只限在{}中,所以不存在上述问题。

switch语句遵循如下规则:
1。switch表达式必须产生一个整型值,而且必须放在括号内。.
2。value1,……value是整形常量表达式,即表达式中不能包含变量,如X+1是不允许的。
3。当某个case语句的值与switch表达式的值相等时,case语句开始执行后续语句,直至遇到一个break语句或者到达switch语句末尾。
4。关键字break是可选的,break语句会立即终止switch语句的执行。
5。default语句也是可选的,他用于指出,当任何情况下均与switch表达式不匹配时,执行什么动作。
6。switch语句是顺序检查的,但各种情况的次序是无关紧要的。
7。switch()后面不加分号!
8.switch语句
case ‘A’:
后面中即使右多条执行语句,也不需要加入大括号

注意:在c++中,char型和bool型是按整型来处理的。

比如下面语句,会将a打印三次
switch(ch)
case 'a': cout<<ch;
case 'b': cout<<ch;
case 'c': cout<<ch;

11.在switch-case语句中,多个case可以共用一条执行语句,如:

引用
--------------------------------------------------------------------------------
……
case 'A':
case 'B':
case 'c':
printf(">60\n");
break;
……
--------------------------------------------------------------------------------


在A,B,C3种情况下,均执行相同的语句,即输出">60".


例:用switch语句实现简单的四则运算

#include <iostream>
using namespace std;
void main()
{
    double a ,b;
    char c;
    cout<<"输入两个数,并进行计算,格式如:a+b"<<endl;
    cin>>a>>c>>b;
    switch(c)
    {
    case '+':
        cout<<a<<"+"<<b<<"="<<a+b<<endl;
        break;
    case '-':
        cout<<a<<"-"<<b<<"="<<a-b<<endl;
        break;
    case '*':
        cout<<a<<"*"<<b<<"="<<a*b<<endl;
        break;
    case '/':
        cout<<a<<"/"<<b<<"="<<a/b<<endl;
        break;
    default :
        cout<<"非法的操作"<<endl;
        break;
    }
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值