C语言中switch()语句的括号内可以是什么型别的呢
发布时间:2025-05-19 06:11:57 发布人:远客网络
一、C语言中switch()语句的括号内可以是什么型别的呢
C语言中switch()语句的括号内可以是什么型别的呢?
switch()语句的括号内的表示式必须是整型,它要与case里的值呼应.
switch()语句的括号内的表示式必须是整型,它要与case里的值呼应.
字元型,只有字元常量可以,例如'a''b''6''\r'实际上是整型.
布林型--真,假,实际上是 0, 1...整型.
估计 enum型也可以,因为它模拟0,1,2,3...
你确认你问的是语句?花括号里加什么语句都可以啊;如果是圆括号,里面的是表示式,不是语句。
圆括号中的表示式应该有标量型别。
C99标准原文:The controlling expression of an if statement shall have scalar type.
语句可以为复合语句,复合语句就是{...}这样的!
只可以是整型算术表示式,其它都不符合语法要求。
switch()小括号内的结果用到 case N:的 N来确定转向。
N是整型,所以必须要整型算术表示式。
字元型的量(不是字串),可以看作整型量,例如'A','x',所以可以用。
逻辑表示式,输出的“真”“假”实质上是1和0,用到switch()小括号内,会得到编译警告错误资讯,因为不符合语法要求,但可以正确执行。
case 0: printf("a+b=%f\n",a+b);break;
case 1: printf("a-b=%f\n",a-b);break;
default: printf("default\n"); break;
case 0: printf("x: a+b=%f",a+b);break;
case 1: printf("x: a-b=%f",a-b);break;
default: printf("x: default\n"); break;
作为我们一般使用,就记住,只用整型算术表示式。
刚才试了一下,我定的是float型别,编译的时候提示错误,说 switch后的表示式不是整型,那就表明,这个表示式只能是整型和字元型。(因为字元的数字特性,所以也可看做是整型)
其中"表示式"指的是ANSI标准中允许的任何型别.说白了,就是只要是你知道的C语言中的型别都可以用!但是一般来说整型和字元型用的多一点,这可能是因为这两种型别比软好理解,而且又更常用的原因.以上回答是来自谭浩强老先生的<C语言设计>绝对全威!
虽然 x=4表示把4赋值给x,但是却不是你说的这样,这个表示式本身的值不是4,而是逻辑值1,因为除个别特殊情况下表达式 x=4,永远都是成功的,即其表示式的值为真(逻辑值为 1);
switch()语句是用来处理多情形的,括号里的表示式可以是整型或字元型,且有一个确定的值,但是不能是逻辑值
case后的型别只能是int(或char)或是列举(或“”引起来的字串)。
所以Switch中的型别可以是,int,char,列举,或是引用型别string。
C语言的switch语句中的条件可以是任意型别,但是由于当是bool型别的时候会出现不可预料的回圈,所以一般不用bool型别
switch(表示式)C语言switch中的“表示式“,ANSI标准允许它为任何型别。一般的C语言中的型别都可以用,但是整型和字元型用的多一点,ANSI标准已经提及,如果想知道更详细可以查阅相关文件::download.chinaprj./detail/rOOTDBi或者:download.csdn./source/286783
二、关于C语言中的switch语句变量类型的问题
关于C语言中的switch语句变量类型的问题
switch的变量必须是整数。char, int, short, long等等。float不行。
switch的变量必须是整数。char, int, short, long等等。float不行。
括号里面的标签可以任意写。把default拼写错也没关系。
switch有个特殊用途,例如,做加减法运算,对于减法可以将减数先求相反数,然后再进行加法运算。可以这样写:
这样在处理减法时就多了求相反数的操作,然后就和加法一样了。
这个用法好像是在c陷阱与缺陷里看到的。
在switch语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。
即x=1时从case 1开始执行到最后;即x=2时从case 2开始执行到最后.
即:case 1: printf("a"); break;
C语言中,变量分为全局变量和局部变量;也可以这样分:自动变量,静态变量.前者是按变量作用范围来分的,而后者是按变量存储方式来分的.
如果按存储占用空间来分,可以是整型变量,字符型变量,浮点型变量等.当然还有数组,结构体变量等.
C语言还有一个重要变量:指针变量.它存放的值是一个内存地址.
另一点,声明变量时,可以不用声明就直接赋值来决定变量类型的语言如(javascript,flash cs3.0以前,等),这类语言变量的声明通常被称为弱类型,而如(c++等)必须先声明,后使用,而且声明时必须确定变量类型,这种就是严格的数据类型.
因为C语言设计的时候,为了灵活性,switch的语法是反人性的,一个分支不加break的话,是不会自己跳出来的。这个跟想象中的分支的含义不太一样。
这种语法的目的,仅仅是类似这种:
case'b': DO SOMETHING; break;
表示条件 a或者 b其中任何一个成立,就执行,语言的实现方便。
按照正常人喜欢的逻辑,最好能这么写:
case'a'||'b': DO SOMETHING;然后不用写break
我完全理解lz发这个问题的心情,要学就继续忍受,比这郁闷的坑多着
switch语句的规则是首先找到一个匹配项,在此匹配项之下开始运行,直到遇到一个break则返回,比如对于i=1,首先找到case 1:,然后没有看到break,继续执行case 2:的语句,a+3,然后还是发现没break,又执行default,使得a=8了,其他的i值以此类推会得到31这个结果
他没有忽略case 1:这个语句,只是这个只是一个标记,用来判断i值是否为1,当i=1的时候就会执行case 1:后面的语句,但是发现case 1:这个语句后面没有可执行的语句,也没有break,因此他继续执行case 2:下面的语句,直到遇见一个break或者这个域结束
是不同的,比如switch(i),当i=1的时候上面的a=3,下面的会使得a=6
判断变量是符合哪个case,如果符合某一个case,那么从那个case处执行。
因此如果没有break语句,下面的case依然会按顺序执行,switch只负责跳到哪儿,该怎么执行还是怎么执行。
题目当中的case 1没有break,因此case2依然会执行。
自动转化限制很多,最重要的限制是:运行需要按顺序,每次运行都要进行变量类型检查,如果变量类型不一致,则都转化成精确度高的类型。
注意:如果表达式复杂,那么表达式会被转化成许多步,每步进行的运算,都会进行变量类型自动转换。
就像上面的例子,先将1转化成float型,那么1/p的结果就是float型,然后将值赋给i。
case语句只能是常量或常量表达式,变量是不行的。
如果要表达:0<a<100,没必要用switch语句,直接用if(a>0&&a<100)即可
你的default没有break;所有它在执行default的内容以后继续查找后面的case,要么你就把default放到所有的case后面去就是了...
三、c语言switch语句中缺少一个中括号程序还会正常执行吗
看这个问题已经有好几天了,没有结案,看来是有问题。
C语言中,switch语句的语法,大体是这样:
}
整个语句中,并非一定有中括号“[]”的出现。
整个语句中,并非一定有中括号“[]”的出现。
1.如果“缺中括号”在普通的语句里,则编译会出错。程序无法生成,更无法运行。
2.如果“缺中括号”在注释中,不好看,但不影响程序。
3.如果“缺中括号”在字符串中,该字符串用于后续的计算,程序可编译,但结果可能出错。
4.如果“缺中括号”在字符串中,该字符串“不”用于后续的计算,只是输出。程序不会出错,但是输出结果会可能导致阅读困难或误导。
如果能把程序贴出来,就一目了然了。谢谢。