本帖最后由 fantasyhpu 于 2024-5-24 18:05 编辑
对于C51编译器:
在C语言的switch...case结构中,switch后面跟着表达式,例如:
[C] 纯文本查看 复制代码 switch(表达式)
{
//case
}
这里的表达式,不能是逻辑表达式,尽管逻辑表达式的值只有两个值:0和1
例如下面的代码中,尽管逻辑表达式ch>='a'&&ch<='z'只有0或1两个值,但是实际运行时,永远不会进入case 0或case 1。原因似乎是ch>='a'&&ch<='z'运算后的结果,即0或1,是逻辑0或逻辑1,这与case后面的整数0或1似乎不是一回事。
[C] 纯文本查看 复制代码 switch(ch>='a'&&ch<='z')
{
case 0:ch=ch+32;break;
case 1:ch=ch-32;break;
}
为解决这一问题,可以对ch>='a'&&ch<='z'进行强制类型转换,例如下面三种强制类型转换均可以:
[C] 纯文本查看 复制代码 switch((char)(ch>='a'&&ch<='z'))
switch((unsigned char)(ch>='a'&&ch<='z'))
switch((unsigned int)(ch>='a'&&ch<='z'))
但是,若用(int)对ch>='a'&&ch<='z'进行强制类型转换则不可以,即:
[C] 纯文本查看 复制代码 switch((int)(ch>='a'&&ch<='z'))
以上说明经过了C51编译器的测试。
|