C语言switch 和 case 后的表达式值的类型是否可以是浮点型? | 您所在的位置:网站首页 › switch中的case后面可以写多少个语句 › C语言switch 和 case 后的表达式值的类型是否可以是浮点型? |
一、问题
switch...case 语句根据 switch 后⾯的表达式的计算结果,在后⾯的多个 case 中找对应相等的值,决定执⾏对应 case 后的语句。case 后的值不可以是关系表达式,只能是常量或常量表达式。从数据类型上来说,它只能是整型或字符型,不能是浮点型。那么,switch 后⾯的表达式是否也有此要求,即只能是整型呢? 二、解答 case 后⾯的值只能是整型,switch 后⾯的值可以是浮点型,⼆者在进⾏值匹配时,先将 switch 计算结果转换为整型,再与 case 进⾏匹配测试。例如: 按数学意义,x和y都可以是⼩数。C程序中可以将 x/10,得出⼀⼩数,此数值如果得3、3.5或3.51,都执⾏同⼀操作3。程序如下。 #include int main() { double x, y; printf("Input x:\n"); scanf("%lf", &x); if (x >= 50) return 0; switch ((int)x / 10) { case 5: y = 5 * x; break; case 4: y = 4 * x; break; case 3: y = 3 * x; break; default: y = 2 * x; break; } printf("y = %lf\n", y); }再说 case 后的表达式,如果把 case 3 改成 case 6/2,此时没有错误,改成 case 7/2 也没有错误。此时,计算机认为是整数3(两个整数运算的结果是整数),⽽不是3.5。如果改成7/2.0,此时编译错误。 三、总结switch 后可以不是整型,但与它匹配时会⾃动转换成整型。case 后必须是整型(含字符型)。 |
CopyRight 2018-2019 实验室设备网 版权所有 |