鱼C论坛

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

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

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

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

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

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         float i;

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

  7.         switch (i)
  8.         {
  9.                 case 1.2: printf("1.2\n"); break;
  10.                 case 2.2: printf("2.2\n"); break;
  11.                 case 3.2: printf("3.2\n"); break;
  12.                 case 4.2: printf("4.2\n"); break;
  13.                 case 5.2: printf("5.2\n"); break;
  14.         }

  15.         return 0;
  16. }
复制代码

小甲鱼在解释这串代码的错误原因时说“有错!这段代码错在 case 仅是一个标签,后边跟随的应该是一个整型常量”
后面应该跟随一个整型常量
但是小甲鱼上课时举过这样一个例子
  1. char ch
  2. printf("请输入成绩:");
  3. scanf("c",&ch);
  4. switch(ch)
  5. {
  6.     case "A":printf("balabala")
  7.     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 值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

case 后面跟的不能是浮点数。
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

只要可以确定值 ...

所以,小甲鱼老师在做课后习题讲解时说的case后面只能放整型常量是错的了是吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

一语惊醒梦中人!谢谢!
小甲鱼最新课程 -> https://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 值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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