关于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;
}
}
一开始我试的时候的确能用,但是我用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;
}
}
相关文章推荐
- 关于switch...case...语句(Compiler Error C2360)
- 关于C/C++中switch语句case中变量不能初始化赋值的问题
- switch 语句关于case的使用
- 关于switch语句的case 嵌套
- 实验四第4题:关于switch...case分支语句的使用
- adt版本升级后,不支持switch...case语句的解决办法
- Swift中的条件切换语句switch...case学习教程
- [初学笔记]switch case语句
- 【android乱七八糟】关于OnClickListener事件中加switch语句讨论
- 在VC中使用switch语句时遇到“error C2360: initialization of 'k' is skipped by 'case' label”的编译错误。
- switch case 语句特征
- Android switch语句报case expressions must be constant expressions
- 关于Switch语句中default的位置
- 关于C/C++ switch语句你也许不知道的一些事
- (13)递增递减运算符 (14)字符串运算符 (15)赋值运算符 (16)switch case语句
- 题目:求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句
- iOS中switch case语句里面不能定义对象,有语法错误,除非加一个花括号
- java中的switch...case..语句详细介绍
- switch case语句里面不能定义对象,解决方法
- 在switch中的case语句中声明变量会被提前