0

在我的作业中,我被要求编写一个程序,同时使用 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();
 }
4

3 回答 3

5

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

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

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

于 2013-11-15T06:53:10.937 回答
0

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

只需阅读如何switch/case工作

于 2013-11-15T06:54:14.927 回答
0

对于范围相关的条件,最好使用 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 */
     }
于 2013-11-15T07:03:06.580 回答