当前位置: 代码迷 >> C语言 >> switch多分支选择语句不支持关系、逻辑运算符吗?
  详细解决方案

switch多分支选择语句不支持关系、逻辑运算符吗?

热度:509   发布时间:2008-04-07 22:24:36.0
switch多分支选择语句不支持关系、逻辑运算符吗?
#include <stdio.h>
void main()
{
float p,w,d,f;
int s;
printf("Please input p,w,s:");
scanf("%f,%f,%d",&p,&w,&s);
  switch (s)
  {
  case (s<250): d=0; break;
  case (s >= 250 && s < 500): d=2; break;
  case (s >= 500 && s < 1000): d=5; break;
  case (s >= 1000 && s < 2000): d=8; break;
  case (s >= 2000 && s < 3000): d=10; break;
  default: d=15;
  }
  f=p*w*s*(1-d/100.0);
  printf("freight=%15.4f\n",f);
}
  这是根据谭浩强《C程序设计》(第三版)P110例5.7改写的程序,例题中的程序也是用switch写的。(如果需要,下次再补原程序吧!)

  运行后报错,有以下2个提示:
Constant expression required in funtion main
Duplicate case in function main


  难道说,[bo]case后面只能是常量一类的表达式,还是我在其它方面出现了纰漏[/bo]??
  还望各位多多指教!!
搜索更多相关的解决方案: switch  amp  分支  逻辑运算符  谭浩强  

----------------解决方案--------------------------------------------------------
switch(判断表达式)
{
case:常量表达式或常量;break;
。。。。
}

[[it] 本帖最后由 now 于 2008-4-7 22:32 编辑 [/it]]
----------------解决方案--------------------------------------------------------
LZ应该重新看看书中的switch的语法


----------------解决方案--------------------------------------------------------
Constant expression required in funtion main
Duplicate case in function main
要求常量表达式

如果想要有switch()
可以用下面的这种形式就可以达到你题目的要求了.
switch(s/250)
{
case 0:......
caxe 1:......
......
}
----------------解决方案--------------------------------------------------------
那么,求闰年这种程序是不是就不能用switch写了??
#include <stdio.h>
void main()
{
int year,leap;
scanf("%d",&year);
switch (year)
{
  case (year == (year%4 != 0)):  leap=0;
  case (year == (year%100 != 0)):  leap=1;
  case (year == (year%400 != 0)):  leap=0;
  default:  leap=1;
}
if (leap)
  printf("%d is",year);
else
  printf("%d is not",year);
printf(" a leap year.\n");
}

  我是用switch写的,和谭的教材无关。
----------------解决方案--------------------------------------------------------
为什么要用switch 呢。一句话就可以了啊
----------------解决方案--------------------------------------------------------
也不是不能.用if比较好一点.如果不是要求,还是选最方便的一种吧.
if (year%4 == 0 && year%100 != 0 || year%400 == 0)
   leap =1;
else leap = 0;
----------------解决方案--------------------------------------------------------
恩,我觉得打得麻烦就没打,谢谢楼上帮打了,哈
----------------解决方案--------------------------------------------------------
只是想着,一个程序自己可以用多种方式来尝试,就算是练练吧!!!
----------------解决方案--------------------------------------------------------
  相关解决方案