鱼C论坛

 找回密码
 立即注册
查看: 1343|回复: 5

[已解决]switch语句中case后面可以跟的常量类型

[复制链接]
发表于 2020-2-29 17:28:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main()
{
        float i;

        printf("请输入一个小数:");
        scanf("%f", &i);

        switch (i)
        {
                case 1.2: printf("1.2\n"); break;
                case 2.2: printf("2.2\n"); break;
                case 3.2: printf("3.2\n"); break;
                case 4.2: printf("4.2\n"); break;
                case 5.2: printf("5.2\n"); break;
        }

        return 0;
}
小甲鱼在解释这串代码的错误原因时说“有错!这段代码错在 case 仅是一个标签,后边跟随的应该是一个整型常量”
后面应该跟随一个整型常量
但是小甲鱼上课时举过这样一个例子
char ch
printf("请输入成绩:");
scanf("c",&ch);
switch(ch)
{
    case "A":printf("balabala")
    case "B":  printf("balabala")
这样一来case后面跟的不就是字符型常量了吗
那么case后面到底可以跟什么呢
请大神们帮我解答一下
最佳答案
2020-2-29 19:15:54
        在计算机中,一个浮点数占用 4 个字节,也就是 32 位,实质上是利用有限的整数空间来表达无限的浮点数,这就决定了计算机对浮点数的表达一定不会是精确的。好比限定只能用 0、5、10、15、20 共 5 个数来表达 0 ~ 20 之间连续变化的不同数值,那么,在这个体系中,2 会通过 0 来表达,8 会用 10 来表达,12 会用 10 来表达,18 会用20 来表达等等,这种情形就是近似表达。8 和 12 都会通过 10 来表达,而 8 和 12 肯定是不相等的。这就是为什么不可以在判断相等的表达式中使用浮点数的原因。
        整型数就不同了,1是1,2便是2,不存在任何精度问题。字符型变量其实也是整型数,因为每个字符都有自己不同的 ASCII 编码,字符比较,比的正是字符的 ASCII 值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 17:31:26 | 显示全部楼层
本帖最后由 zltzlt 于 2020-2-29 17:35 编辑

case 后面跟的不能是浮点数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 19:02:43 | 显示全部楼层
zltzlt 发表于 2020-2-29 17:31
case 后面跟的不能是浮点数。

case后面的值是在编译时候就要确定的,所以只能是常量,但不一定非得是1,2,3之类的数字

只要可以确定值就可以,比如(2+4)*3

或不等式:2'A'&&ch
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 19:07:36 | 显示全部楼层
一个账号 发表于 2020-2-29 19:02
case后面的值是在编译时候就要确定的,所以只能是常量,但不一定非得是1,2,3之类的数字

只要可以确定值 ...

所以,小甲鱼老师在做课后习题讲解时说的case后面只能放整型常量是错的了是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 19:10:59 | 显示全部楼层
major_lyu 发表于 2020-2-29 19:10
字符常量本质上是整型常量啊

一语惊醒梦中人!谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 19:15:54 | 显示全部楼层    本楼为最佳答案   
        在计算机中,一个浮点数占用 4 个字节,也就是 32 位,实质上是利用有限的整数空间来表达无限的浮点数,这就决定了计算机对浮点数的表达一定不会是精确的。好比限定只能用 0、5、10、15、20 共 5 个数来表达 0 ~ 20 之间连续变化的不同数值,那么,在这个体系中,2 会通过 0 来表达,8 会用 10 来表达,12 会用 10 来表达,18 会用20 来表达等等,这种情形就是近似表达。8 和 12 都会通过 10 来表达,而 8 和 12 肯定是不相等的。这就是为什么不可以在判断相等的表达式中使用浮点数的原因。
        整型数就不同了,1是1,2便是2,不存在任何精度问题。字符型变量其实也是整型数,因为每个字符都有自己不同的 ASCII 编码,字符比较,比的正是字符的 ASCII 值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表