鱼C论坛

 找回密码
 立即注册
查看: 1142|回复: 13

[已解决]?!

[复制链接]
发表于 2020-10-27 18:38:52 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
求问各位大佬,我这代码哪里错了,为什么最后输出结果时e那个公式可以运行成功而m那个公式运行不成功???

#include<stdio.h>
int main()
{
        int m,e,choice1,choice2;
        double a,cost;
        printf("Enter a:");
        scanf("%lf",&a);
    printf("[90]seclet 90\n");
        printf("[93]select 93\n");
        printf("[97]select 97\n");
        printf("Enter choice1:");
        scanf("%d",&choice1);
        printf("[m]select m\n");
        printf("[e]select e\n");
        printf("Enter choice2:");
        scanf("%d",&choice2);
       
        switch(choice1){
                case 90:cost=6.95;break;
                case 93:cost=7.44;break;
                case 97:cost=7.93;break;
                default:cost=0.00;break;
        }
       
        if(choice2==m){
                cost=cost*a*(1-0.05);}
        else if(choice2==e){
                cost=cost*a*(1-0.03);}
                else
                printf("default\n");
                printf("%.2f\n",cost);
        return 0;
}
最佳答案
2020-10-29 01:55:08

刚下班回来,又仔细查看了我前面发的程序,确实存在错误没有修改: 1、choice2 应该是 char 型;2、choice1 输入后,没有吸收回车,导致后面输入字符时,总是将这个回车赋给了 choice2;3、输入 choice2 时,使用的控制符不正确;4、比较字符时,要加单引号
#include<stdio.h>
int main()
{
    int m,e,choice1;
    char choice2;                // 由于接收的是字符 
    double a,price,cost;
    printf("Enter how much gas a = ");
    scanf("%lf",&a);
    printf("90# gas seclet 90\n");
    printf("93# gas select 93\n");
    printf("97# gas select 97\n");
    printf("Enter choice1: ");
    scanf("%d",&choice1);
    getchar();                     //吸收回车键, 此语句最为关键 
            
    switch(choice1)
    {
    case 90:price=6.95 * a;break;
    case 93:price=7.44 * a;break;
    case 97:price=7.93 * a;break;
    default:price=0.00;break;
    }
    printf("%.2f\n",price);      // 没有优惠时该付金额 
    
    printf("self-service select m\n");
    printf("ancillary-service select e\n"); 
    printf("Enter choice2: ");
    scanf("%c",&choice2);        // 接收字符,用了 %d
    getchar();                   // 吸收回车键,你的错误主要在此,你输入的是字符,回车也是字符哟~~ 
            
    if(choice2 == 'm')           // 单引号不能少 
    {
        price = (1 - 0.05) * price;
    }
    else if(choice2 == 'e')      // 单引号不能少
    { 
        price = (1 - 0.03) * price;
    } 

        printf("\n"); 
        printf("You need pay %.2lf yuan\n",price);
    return 0;
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-27 19:11:22 | 显示全部楼层
你这m和e没有初值啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 20:05:36 | 显示全部楼层
你的程序没有问题

Enter a:6.8
[90]seclet 90
[93]select 93
[97]select 97
Enter choice1:90
[m]select m
[ e]select e
Enter choice2:e
def ault
6.95
----------------------------------------
Process exited after 81.91 seconds with return value 0
请按任意健继续 . . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 20:06:30 | 显示全部楼层
昨非 发表于 2020-10-27 19:11
你这m和e没有初值啊?

他这个程序不需要赋初值,m、e 是作为选项的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 20:08:50 | 显示全部楼层
风过无痕1989 发表于 2020-10-27 20:06
他这个程序不需要赋初值,m、e 是作为选项的

我的vs是报错了,不清楚。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 20:13:31 | 显示全部楼层
昨非 发表于 2020-10-27 20:08
我的vs是报错了,不清楚。。。。

我用的是DEV,运行完了他的程序的各个选项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-27 22:40:06 From FishC Mobile | 显示全部楼层
题目是这个:现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

是我最后输出时m那个公式结果算不对,但是我不知道错哪了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-28 13:18:48 | 显示全部楼层
你发帖时没有明确,只好帮你验证程序,修改程序中的错误。现在明确了题目意图,帮你修改的程序如下:
#include<stdio.h>
int main()
{
    int m,e,choice1,choice2;
    double a,cost;
    printf("Enter how much gas a = ");
    scanf("%lf",&a);
    printf("90# gas seclet 90\n");
    printf("93# gas select 93\n");
    printf("97# gas select 97\n");
    printf("Enter choice1:");
    scanf("%d",&choice1);
        
    switch(choice1)
    {
    case 90:cost=6.95 * a;break;
    case 93:cost=7.44 * a;break;
    case 97:cost=7.93 * a;break;
    default:cost=0.00;break;
    }
    
    printf("[m]select m\n");
    printf("[e]select e\n"); 
    printf("Enter choice2:");
    scanf("%d",&choice2);
    getchar();                      // 吸收回车键,你的错误主要在此,你输入的是字符,回车也是字符哟~~ 
            
    if(choice2 == m)
    {
        cost=cost * (1-0.05);
    }
    else if(choice2 == e)
    { 
        cost=cost * (1-0.03);
    } 
    else
        printf("\n"); 
        printf("You need pay %.2f yuan\n",cost);
    return 0;
}

如果满意了,就请给个最佳答案,如果还不如意,请提出存在的问题,我继续改进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-28 22:56:40 From FishC Mobile | 显示全部楼层
风过无痕1989 发表于 2020-10-28 13:18
你发帖时没有明确,只好帮你验证程序,修改程序中的错误。现在明确了题目意图,帮你修改的程序如下:



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

使用道具 举报

发表于 2020-10-29 01:55:08 | 显示全部楼层    本楼为最佳答案   

刚下班回来,又仔细查看了我前面发的程序,确实存在错误没有修改: 1、choice2 应该是 char 型;2、choice1 输入后,没有吸收回车,导致后面输入字符时,总是将这个回车赋给了 choice2;3、输入 choice2 时,使用的控制符不正确;4、比较字符时,要加单引号
#include<stdio.h>
int main()
{
    int m,e,choice1;
    char choice2;                // 由于接收的是字符 
    double a,price,cost;
    printf("Enter how much gas a = ");
    scanf("%lf",&a);
    printf("90# gas seclet 90\n");
    printf("93# gas select 93\n");
    printf("97# gas select 97\n");
    printf("Enter choice1: ");
    scanf("%d",&choice1);
    getchar();                     //吸收回车键, 此语句最为关键 
            
    switch(choice1)
    {
    case 90:price=6.95 * a;break;
    case 93:price=7.44 * a;break;
    case 97:price=7.93 * a;break;
    default:price=0.00;break;
    }
    printf("%.2f\n",price);      // 没有优惠时该付金额 
    
    printf("self-service select m\n");
    printf("ancillary-service select e\n"); 
    printf("Enter choice2: ");
    scanf("%c",&choice2);        // 接收字符,用了 %d
    getchar();                   // 吸收回车键,你的错误主要在此,你输入的是字符,回车也是字符哟~~ 
            
    if(choice2 == 'm')           // 单引号不能少 
    {
        price = (1 - 0.05) * price;
    }
    else if(choice2 == 'e')      // 单引号不能少
    { 
        price = (1 - 0.03) * price;
    } 

        printf("\n"); 
        printf("You need pay %.2lf yuan\n",price);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-29 09:52:27 | 显示全部楼层
风过无痕1989 发表于 2020-10-29 01:55
刚下班回来,又仔细查看了我前面发的程序,确实存在错误没有修改: 1、choice2 应该是 char 型;2、choice ...

那int e,m;用不着啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-29 11:50:34 | 显示全部楼层

人家的程序里用了,没有大问题,我不能随便就给人家去掉了,是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-2 14:02:03 From FishC Mobile | 显示全部楼层
风过无痕1989 发表于 2020-10-29 01:55
刚下班回来,又仔细查看了我前面发的程序,确实存在错误没有修改: 1、choice2 应该是 char 型;2、choice ...

不好意思,这几天事情比较多,现在才看到,这次运行对了,多谢帮忙!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 14:35:43 | 显示全部楼层
琪琪怪怪 发表于 2020-11-2 14:02
不好意思,这几天事情比较多,现在才看到,这次运行对了,多谢帮忙!

不必客气,刚开始学习,谁都有不知所措的时候。有问题尽管来求助,论坛的朋友们会热心帮助你的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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