因为多个case 中表达式的运算结果不能有相同的值。
a是7
第一个
case a<1:是比较运算,结果为 0(也就是假值)
第二个
case a>6:结果为 1(也就是真值)
两个case 中一个0,一个1是不相同的值,可以。
如果第二个是case a>66:结果也是0
两个case 的值都是0,相同了,就会出错。
就等于是
switch (a)
{
case 0:
case 0:
break;
default:
break;
}
另外
switch (a) 应该改成 switch (1)
case a>1: 中是比较运算,结果为 0 或者 1 ,要判断是否等于1。而不是判断是否等于a
case 后面只能跟一个值,你用 a<6,其实是一个表达式,当a为7时,你的代码相当于
swtich(7)
{
case 0:
...
case 1:
...
}
这时候两个case值不同,所以编译可以通过。
当改为a>7时,相当于case 0,两个case 0是不可以的
case 后面必须是常量,不能为关系表达式,想达到什么效果呢?帮你改一下。
switch的作用是将一个值(变量或常量)和一堆常亮进行比较,它不是if,不可以把两个变量互相比较
如果你的a是个变量,那么你的case a<1就直接报错了
但是因为你的a是个常量,所以在编译阶段编译器就能计算出一个确定的结果,把a<1用0代替