【问题标题】:Compiler throwing an error case label does not reduce to a constant抛出错误案例标签的编译器不会减少为常数
【发布时间】:2013-11-15 06:51:26
【问题描述】:

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

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

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

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

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

这是我可以想出的,但是在编译时给了我类似的错误

第 10 行:错误:case 标签未缩减为整数常量 第 13 行:错误:case 标签未缩减为整数常量 第 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();
 }

【问题讨论】:

    标签: c switch-statement


    【解决方案1】:

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

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

    如果您想在运行时进行分支,请使用if-else

    【讨论】:

    • 感谢您的回答。如果 case 标签不需要是常量,那么如何同时使用 if 和 switch 语句来编写这个程序?我有点困惑。
    • 你想用 if 和 case 来写这个程序吗?
    • 是的,这就是问题告诉我的。
    • 给我一些时间,会尝试让你知道。
    【解决方案2】:

    如果你使用 switch case,你必须匹配精确的值(常量),否则,使用级联 if

    看看switch/case是如何工作的

    【讨论】:

      【解决方案3】:

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

          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 */
           }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多