switch语句中case后面可以跟的常量类型
#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后面到底可以跟什么呢
请大神们帮我解答一下
本帖最后由 zltzlt 于 2020-2-29 17:35 编辑
case 后面跟的不能是浮点数。 zltzlt 发表于 2020-2-29 17:31
case 后面跟的不能是浮点数。
case后面的值是在编译时候就要确定的,所以只能是常量,但不一定非得是1,2,3之类的数字
只要可以确定值就可以,比如(2+4)*3
或不等式:2'A'&&ch 一个账号 发表于 2020-2-29 19:02
case后面的值是在编译时候就要确定的,所以只能是常量,但不一定非得是1,2,3之类的数字
只要可以确定值 ...
所以,小甲鱼老师在做课后习题讲解时说的case后面只能放整型常量是错的了是吗 major_lyu 发表于 2020-2-29 19:10
字符常量本质上是整型常量啊
一语惊醒梦中人!谢谢! 在计算机中,一个浮点数占用 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 值。
页:
[1]