看看我的 switch case 的用法哪里出问题了?

来源:百度知道 编辑:UC知道 时间:2024/06/17 12:56:07
int main()
{
long int n,y;
clrscr();
printf("input n:");
scanf("%ld",&n);
switch(n)
{
case(n>0 && n<100000):y=n*0.1;break;
case(n>=100000 && n<=200000):y=10000+(n-100000)*0.075;break;
case(n>200000 && n<=400000):y=1000+7500+(n-200000)*0.05;break;
case(n>400000 && n<=600000):y=10000+7500+10000+(n-400000)*0.03;break;
case(n>600000 && n<=1000000):y=10000+7500+10000+6000+(n-600000)*0.015;break;
case(n>1000000):y=10000+7500+10000+6000+6000+(n-1000000)*0.01;break;
}
printf("y is %ld",y);
return 0;
}

你这是if语句的用法,case后面只能是字符或数字,你这些表达式的值只能为0或1,根本无法达到目的,应该像下面这样:
switch(n/100000)
{case 0:y=n*0.1;break;
case 1:y=10000+(n-100000)*0.075;break;
case 2:
case 3:y=1000+7500+(n-200000)*0.05;break;
case 4:
case 5:y=10000+7500+10000+(n-400000)*0.03;break;
....

case的值必须是整形的,并且不是经过运算得到的

switch 没见过这样用的,N 应该是个确定的数,而不能是一个范围。你试试用几个IF 或者WHILE语句来实现一下吧