wsb1991abc 发表于 2023-3-8 00:05:14

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结果是错误的,调试弄不了

isdkz 发表于 2023-3-8 00:13:43

输入50000时,程序将会匹配不到任何一个case语句,

因此m的值将是未初始化的,即不确定的。在这种情况下,printf语句中的%lf将会输出一个随机的值。

在 C 语言中,switch 的 case 子句只能使用一个固定的值,而不能使用一个范围,

所以你只能用 if语句了

Rix 发表于 2023-3-9 09:45:13

use default:...........

jhq999 发表于 2023-3-9 09:49:36

Rix 发表于 2023-3-9 09:45
use default:...........

正解

cjgank 发表于 2023-3-9 14:31:15

建议变量定义时初始化,你或许可以运行如下代码:


#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;

wsb1991abc 发表于 2023-3-10 20:39:54

我已经找到正确的答案了,谢谢各位大神的解答
页: [1]
查看完整版本: switch语句的问题