琪琪怪怪 发表于 2020-10-27 18:38:52

?!

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

#include<stdio.h>
int main()
{
        int m,e,choice1,choice2;
        double a,cost;
        printf("Enter a:");
        scanf("%lf",&a);
    printf("seclet 90\n");
        printf("select 93\n");
        printf("select 97\n");
        printf("Enter choice1:");
        scanf("%d",&choice1);
        printf("select m\n");
        printf("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-27 19:11:22

你这m和e没有初值啊?

风过无痕1989 发表于 2020-10-27 20:05:36

你的程序没有问题

Enter a:6.8
seclet 90
select 93
select 97
Enter choice1:90
select m
[ e]select e
Enter choice2:e
def ault
6.95
----------------------------------------
Process exited after 81.91 seconds with return value 0
请按任意健继续 . . .

风过无痕1989 发表于 2020-10-27 20:06:30

昨非 发表于 2020-10-27 19:11
你这m和e没有初值啊?

他这个程序不需要赋初值,m、e 是作为选项的

昨非 发表于 2020-10-27 20:08:50

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

我的vs是报错了,不清楚。。。。

风过无痕1989 发表于 2020-10-27 20:13:31

昨非 发表于 2020-10-27 20:08
我的vs是报错了,不清楚。。。。

我用的是DEV,运行完了他的程序的各个选项

琪琪怪怪 发表于 2020-10-27 22:40:06

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

是我最后输出时m那个公式结果算不对,但是我不知道错哪了!!

风过无痕1989 发表于 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("select m\n");
    printf("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;
}


如果满意了,就请给个最佳答案,如果还不如意,请提出存在的问题,我继续改进

琪琪怪怪 发表于 2020-10-28 22:56:40

风过无痕1989 发表于 2020-10-28 13:18
你发帖时没有明确,只好帮你验证程序,修改程序中的错误。现在明确了题目意图,帮你修改的程序如下:




还是不对。{:10_269:}

风过无痕1989 发表于 2020-10-29 01:55:08

琪琪怪怪 发表于 2020-10-28 22:56
还是不对。

刚下班回来,又仔细查看了我前面发的程序,确实存在错误没有修改: 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;
}

吃点饭饭 发表于 2020-10-29 09:52:27

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

那int e,m;用不着啊

风过无痕1989 发表于 2020-10-29 11:50:34

吃点饭饭 发表于 2020-10-29 09:52
那int e,m;用不着啊

人家的程序里用了,没有大问题,我不能随便就给人家去掉了,是吧?

琪琪怪怪 发表于 2020-11-2 14:02:03

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

不好意思,这几天事情比较多,现在才看到,这次运行对了,多谢帮忙!

风过无痕1989 发表于 2020-11-2 14:35:43

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

不必客气,刚开始学习,谁都有不知所措的时候。有问题尽管来求助,论坛的朋友们会热心帮助你的
页: [1]
查看完整版本: ?!