switch语句的问题
#include<stdio.h>int main()
{unsigned long i;
double m;
scanf("%u",&i);
switch(i)
{
case 0: m=i*0.1;break;
case 100000:m=(i-100000)*0.075+100000*0.1 ;break;
case 200000: m=(i-200000)*0.05+100000*0.1+100000*0.075;break;
case 400000: m=(i-400000)*0.03+100000*0.1+100000*0.075+200000*0.05;break;
case 600000: m=(i-600000)*0.015+100000*0.1+100000*0.075+200000*0.05+200000*0.03;break;
case 1000000: m=(i-1000000)*0.01+100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015;break;
}
printf("%lf\n",m);
return 0;
}
编译没问题,但我输入50000结果是错误的,调试弄不了 输入50000时,程序将会匹配不到任何一个case语句,
因此m的值将是未初始化的,即不确定的。在这种情况下,printf语句中的%lf将会输出一个随机的值。
在 C 语言中,switch 的 case 子句只能使用一个固定的值,而不能使用一个范围,
所以你只能用 if语句了 use default:........... Rix 发表于 2023-3-9 09:45
use default:...........
正解 建议变量定义时初始化,你或许可以运行如下代码:
#include<stdio.h>
int main(void)
{
unsigned long i = 0;
double m = 0;
scanf("%u", &i);
switch (i)
{
case 0:
m = i * 0.1;
break;
case 100000:
m = (i - 100000)*0.075 + 100000 * 0.1;
break;
case 200000:
m = (i - 200000)*0.05 + 100000 * 0.1 + 100000 * 0.075;
break;
case 400000:
m = (i - 400000)*0.03 + 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05;
break;
case 600000:
m = (i - 600000)*0.015 + 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03;
break;
case 1000000:
m = (i - 1000000)*0.01 + 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015;
break;
default:
break;
}
printf("%lf\n", m);
return 0;
我已经找到正确的答案了,谢谢各位大神的解答
页:
[1]