您的位置:首页 > 其它

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

2012-08-21 15:54 471 查看
大多数书上的例子都是一些一些算数表达式,然后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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: