抛出错误案例标签的编译器不会减少为常量

时间:2013-11-15 06:51:26

标签: c switch-statement

在我的作业中,我被要求使用if和switch语句编写程序,以比较客户支付的净金额以获取以下详细信息

购买金额(100-200)然后给予5%的折扣。

购买金额(200-500)然后给予7.5%的折扣。

购买金额(500-800)然后给予10%折扣。

购买金额(1000以上)然后给予15%的折扣。

这是我可以提出的,但是在编译它时会给我一个像

这样的错误

第10行:错误:案例标签不会减少为整数常量 第13行:错误:案例标签不会减少为整数常量 第17行:错误:在':'标记之前的预期表达式。 任何人都可以帮我这个。我没有正确地回答这个问题,或者我还有其他错误

#include<stdio.h>
main()
{
 int pa = 200;
 float net;
 printf("\n Enter purchased amount");
 scanf("%d",&pa);
 switch(pa)
 {
  case 1&&pa<=100:
     net=pa;
    break;
  case pa>=101&&pa<=200:    
        net=pa-(5.00/100.00)*pa;
    break;
 default:
         if(pa>=201&&pa<=500)
         net=pa-(7.5/100.00)*pa;
         if(pa>=501&&pa<=800)
         net=pa-(10.00/100.00)*pa;
         if(pa>=1000)
         net = pa - (15.00/100.00)*pa;
         break;

  }

  printf("\n the net amount to be paid is%f",net);
  getch();
 }

3 个答案:

答案 0 :(得分:5)

case标签应该是编译时间常量。

您无法在case标签内提供变量。标签中的表达式必须在编译时进行评估。

如果要在运行时分支,请使用if-else

答案 1 :(得分:0)

如果使用switch case,则必须与精确值(常量)匹配,否则,使用cascaded if

请阅读switch / case的工作原理

答案 2 :(得分:0)

对于范围相关的条件,最好使用if / else条件。开关/外壳用于恒定值条件。

    if (pa >= 1 && pa <= 100) {
        net = pa;
     } else if (pa>=101&&pa<=200) {
       net=pa-(5.00/100.00)*pa;
     } else if (pa>=201&&pa<=500) {
       net=pa-(7.5/100.00)*pa;
     } else if (pa>=501&&pa<=800) {
       net=pa-(10.00/100.00)*pa;
     } else if (pa>=1000) {
       net = pa - (15.00/100.00)*pa;
     } else {`<br/>
       /* invalid pa handling */
     }