您当前的位置:首页 > 互联网教程

C语言中switch()语句的括号内可以是什么型别的呢

发布时间:2025-05-19 06:11:57    发布人:远客网络

C语言中switch()语句的括号内可以是什么型别的呢

一、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.如果“缺中括号”在字符串中,该字符串“不”用于后续的计算,只是输出。程序不会出错,但是输出结果会可能导致阅读困难或误导。

如果能把程序贴出来,就一目了然了。谢谢。