在我的作业中,我被要求使用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();
}
答案 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 */
}