鱼C论坛

 找回密码
 立即注册
查看: 1764|回复: 5

[已解决]switch语句的问题

[复制链接]
发表于 2023-3-8 00:05:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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结果是错误的,调试弄不了
最佳答案
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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-8 00:13:43 | 显示全部楼层
输入50000时,程序将会匹配不到任何一个case语句,

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

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

所以你只能用 if语句了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-9 09:45:13 | 显示全部楼层
use default:...........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-9 09:49:36 | 显示全部楼层
Rix 发表于 2023-3-9 09:45
use default:...........

正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-10 20:39:54 | 显示全部楼层
我已经找到正确的答案了,谢谢各位大神的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 17:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表