php switch case语句语句中,case的后面为什么必须是常量

在switch结构中如果有两个case语句后的常量表达式相同,程序会出错吗?
[问题点数:40分]
在switch结构中如果有两个case语句后的常量表达式相同,程序会出错吗?
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。C语言中的switch语句,case后面可不可以跟一表达式,例如“100&x&50”;如不可以为什么?
C语言中的switch语句,case后面可不可以跟一表达式,例如“100&x&50”;如不可以为什么?
switch语句非常有用,但在使用时必须谨慎。所写的任何switch语句都必须遵循以下规则:
  只能针对基本数据类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
  case标签必须是常量表达式(constantExpression),如42或者"42"。如果需要在运行时计算case标签的值,必须使用if语句。
  case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。
  C语言switch应用例子:
  例一:
  #include&stdio.h&
  int main()
  printf("请输入分数:\n");
  scanf("%lf",&score);
  switch((int)(score/10))//switch((int)score/10)出现严重错误
  case 10:
  case 9:printf("A(最好)\n");
  case 8:printf("B(优秀)\n");
  case 7:printf("C(良好)\n");
  case 6:printf("D(及格)\n");
  case 5:
  case 4:
  case 3:
  case 2:
  case 1:
  case 0:printf("E(不及格)\n");
  default:printf("Error!\n");
像你的50&x&100 非要用case
可以定义一个就是a,a=x/50 整除。
然后在case里面列举。
其他回答 (6)
比知道hiai

高级问题我不知道
不可以,case后面需要跟一个常量。如果你想要实现以范围区分,可以使用多个if语句来实现。
100&X&&X&50
不可以,case后面只可以加数字常量或字符常量.
因为switch里面的case要一个常量,所以不可以,语法问题呀
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号您现在的位置:&&>>&&>>&&>>&&>>&&>>&正文
&&►&&C#教程第三课:选择控制语句
C#教程第三课:选择控制语句
作者:未知&&&&阅读人次:……&&&&文章来源:&&&&发布时间:&&&&
2.清单3-2. 分支选择语句: SwitchSelection.cs
using Sclass SwitchSelect {public static void Main() {string myIint myIbegin:Console.Write("Please enter a number between 1 and 3: ");myInput = Console.ReadLine();myInt = Int32.Parse(myInput);// switch with integer typeswitch (myInt) {case 1:Console.WriteLine("Your number is {0}.", myInt);case 2:Console.WriteLine("Your number is {0}.", myInt);case 3:Console.WriteLine("Your number is {0}.", myInt);default:Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);}decide:Console.Write("Type \"continue\" to go on or \"quit\" to stop: ");myInput = Console.ReadLine();// switch with string typeswitch (myInput) {case "continue":case "quit":Console.WriteLine("Bye.");default:Console.WriteLine("Your input {0} is incorrect.", myInput);}}}
说明1.清单3-2 演示了多分支选择语句switch的用法。关键字"switch"后面是switch 表达式。Switch表达式必须是以下类型中的一种: sbyte,byte,short,ushort, int,uint,long,ulong,char,string,或者enum类型。(enum类型将在后面的课程中加以介绍)。在清单3-2的第一个"switch"语句中, switch 表达式计算的是整数类型的数据。2.在switch表达式后面是个switch 块, 当Switch表达式的值同某一个case后面的常量表达式的值相匹配时,就执行此case后面的语句,直到遇到"break"语句或者"goto"语句为止。每个分支以关键字"case"作为标号,其后为常量表达式,然后是分号(:)。本例子程序中,我们有"case 1:","case 2:"和"case 3:"。3.你可以在所有的分支选择的后面加上一个"default"分支。如果没有匹配的常量表达式,就进入default分支,并执行该分支的语句。虽然default标号是可选的,我建议你加上该分支。这将有助于处理一些意外事件 ,使得你的程序能够捕捉和处理不可预见的事件,从而使得程序更加可靠。4.每个"case"标号必须以"break"语句作为结束。"break"语句将使得程序退出switch语句,并从switch块后面的一条语句开始执行。对于"default"标号来说,"break"语句是可选的,因为有"break"语句和没有"break"语句,其运行结果是一样的。如果你在switch块中放置了一个"goto"语句,情况就不一样了。5.清单3-2中的第二个"switch"语句演示了"goto"语句的用法。"goto"语句可以让程序跳到关键字"goto"后面的标号中去执行。程序执行过程中,如果用户打入"continue", switch语句就匹配case "continue" 中的常量表达式,并执行"goto begin:"语句。程序就会离开"switch"语句,开始执行标号"begin:"后的第一条语句。这是个有效的循环,可以让你多次重复执行同样一段代码。一旦用户打入字符串"quit",循环将会结束。此时,将进入case "quit" 分支。该分支将输出信息"Bye."到控制台上,之后跳出switch语句,再结束程序。一旦输入的字符串既不是"continue"也不是"quit",就会进入"default:"分支。于是,将会输出一个出错信息到控制台上,之后执行"goto decide:"命令。这就使得程序转跳到"decide:" 标号后面的第一条语句, 该语句执行后,将会询问用户是否愿意continue(继续)还是 quit(退出)。这是个有效的循环。显然,"goto"语句功能强大,在受控的场合下,"goto"语句是很有用途的。但是,必须指出的是,"goto"如果出现被滥用的趋势,程序的调试和维护将会变得很困难。想象一下,如果程序到处可见goto语句,其流程将会变得难以阅读和理解。下节课中,将介绍在程序中创建循环语句的更好方法。小结现在,你已经了解了如何使用"if"语句的各种格式,也了解了如何使用"switch"语句。你也了解了使用"break"语句可以从"switch"语句中推出。最后,你也了解了如何使用"goto"语句跳到程序的另外一个部分。
文章录入:admin&&&&责任编辑:admin&
上一篇文章: 下一篇文章:
24小时热门帖子
| && | && | && | && | &&|switch语句流程图,必须是字符型或整型
信息来源:网络转载&&&
点击次数:55&&&
更新时间:&&&
  switch语句的执行过程是这样的:首先计算"表达式"的值,然后,其结果值依次与每一个常量表达式的值进行匹配(常量表达式的值的类型必须与"表达式"的值的类型相同)。如果匹配成功,则执行该常量表达式后的语句系列。当遇到break时,则立即结束switch语句的执行,否则,顺序执行到花括号中的最后一条语句。default情形是可选的,如果没有常量表达式的值与"表达式"的值匹配,则执行default后的语句系列。需要注意的是:"表达式"的值的类型必须是字符型或整型。
  我们下面看一个分析双目算术运算的例子4-9。双目算术运算符存在字符型变量operator中,两个操作数分别存在变量operand1和operand2,switch语句执行相应的运算,并将结果存在变量result中。
  图4-4 switch的流程图
  switch (operator) {
  case '+': result = operand1 + operand2;
  case '-': result = operand1 - operand2;
  case '*': result = operand1 * operand2;
  case '/': result = operand1 / operand2;
  default: cout && "unknown operator: " && ch && 'n';
  从上例我们可以看到:switch语句中的每一个case的结尾通常有一个break语句,它停止switch语句的继续执行,而转向该switch语句的下一个语句。但是,我们有时也有意不加break语句。例如,我们修改上面的例子,以允许x作为乘法运算符,则可将上面的程序修改为:
  例4-10
  switch (operator) {
  case '+': result = operand1 + operand2;
  case '-': result = operand1 - operand2;
  case 'x':
  case '*': result = operand1 * operand2;
  case '/': result = operand1 / operand2;
  default: cout && "unknown operator: " && ch && 'n';
  因为case 'x'没有break语句,所以case 'x'与case '*'执行相同的语句系列,也就是说,把'x'扩展成为乘法运算符了。
周点击排行
月点击排行页面导航:
→ 正文内容 c语言break语句
解析c语言switch中break语句的具体作用
以下是对c语言switch中break语句的作用进行了详细的分析介绍,需要的朋友可以过来参考下
问题:break在for循环、while循环等循环流程控制中起的作用是停止执行break后面的语句,跳出本次循环,并跳出该循环控制体;在switch条件选择中,没有了循环控制,break又起什么作用呢?
解决办法:1. switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇到break语句就退出switch语句,程序流程转向开关语句的下一个语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句,然后退出switch语句,程序流程转向开关语句的下一个语句。在switch-case语句中,多个case可以共用一条执行语句,如: case 常量表达式1: case 常量表达式2: case 常量表达式3: 语句;
由此可以看出case语句的作用:case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行;而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出switch语句。因此,若想执行一个case分之后立即跳出switch语句,就必须在此分支的最后添加一个break语句。
2. 从上面的描述可以看出,switch条件选择语句中的break的作用跟循环控制语句中的作用基本相同:都是不执行break之后的语句,并结束退出switch语句;
3. 与循环控制中存在continue语句不同的是,switch条件选择语句中没有continue语句;
ok问题解决。
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910}

我要回帖

更多关于 c语言switch case语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信