大多数书上的例子都是一些一些算数表达式,然后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;
}
}