鱼C论坛

 找回密码
 立即注册
查看: 1442|回复: 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、比较字符时,要加单引号


  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int m,e,choice1;
  5.     char choice2;                // 由于接收的是字符
  6.     double a,price,cost;
  7.     printf("Enter how much gas a = ");
  8.     scanf("%lf",&a);
  9.     printf("90# gas seclet 90\n");
  10.     printf("93# gas select 93\n");
  11.     printf("97# gas select 97\n");
  12.     printf("Enter choice1: ");
  13.     scanf("%d",&choice1);
  14.     getchar();                     //吸收回车键, 此语句最为关键
  15.             
  16.     switch(choice1)
  17.     {
  18.     case 90:price=6.95 * a;break;
  19.     case 93:price=7.44 * a;break;
  20.     case 97:price=7.93 * a;break;
  21.     default:price=0.00;break;
  22.     }
  23.     printf("%.2f\n",price);      // 没有优惠时该付金额
  24.    
  25.     printf("self-service select m\n");
  26.     printf("ancillary-service select e\n");
  27.     printf("Enter choice2: ");
  28.     scanf("%c",&choice2);        // 接收字符,用了 %d
  29.     getchar();                   // 吸收回车键,你的错误主要在此,你输入的是字符,回车也是字符哟~~
  30.             
  31.     if(choice2 == 'm')           // 单引号不能少
  32.     {
  33.         price = (1 - 0.05) * price;
  34.     }
  35.     else if(choice2 == 'e')      // 单引号不能少
  36.     {
  37.         price = (1 - 0.03) * price;
  38.     }

  39.         printf("\n");
  40.         printf("You need pay %.2lf yuan\n",price);
  41.     return 0;
  42. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-27 19:11:22 | 显示全部楼层
你这m和e没有初值啊?
小甲鱼最新课程 -> https://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
请按任意健继续 . . .
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

他这个程序不需要赋初值,m、e 是作为选项的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我的vs是报错了,不清楚。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我用的是DEV,运行完了他的程序的各个选项
小甲鱼最新课程 -> https://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那个公式结果算不对,但是我不知道错哪了!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-28 13:18:48 | 显示全部楼层
你发帖时没有明确,只好帮你验证程序,修改程序中的错误。现在明确了题目意图,帮你修改的程序如下:


  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int m,e,choice1,choice2;
  5.     double a,cost;
  6.     printf("Enter how much gas a = ");
  7.     scanf("%lf",&a);
  8.     printf("90# gas seclet 90\n");
  9.     printf("93# gas select 93\n");
  10.     printf("97# gas select 97\n");
  11.     printf("Enter choice1:");
  12.     scanf("%d",&choice1);
  13.         
  14.     switch(choice1)
  15.     {
  16.     case 90:cost=6.95 * a;break;
  17.     case 93:cost=7.44 * a;break;
  18.     case 97:cost=7.93 * a;break;
  19.     default:cost=0.00;break;
  20.     }
  21.    
  22.     printf("[m]select m\n");
  23.     printf("[e]select e\n");
  24.     printf("Enter choice2:");
  25.     scanf("%d",&choice2);
  26.     getchar();                      // 吸收回车键,你的错误主要在此,你输入的是字符,回车也是字符哟~~
  27.             
  28.     if(choice2 == m)
  29.     {
  30.         cost=cost * (1-0.05);
  31.     }
  32.     else if(choice2 == e)
  33.     {
  34.         cost=cost * (1-0.03);
  35.     }
  36.     else
  37.         printf("\n");
  38.         printf("You need pay %.2f yuan\n",cost);
  39.     return 0;
  40. }
复制代码


如果满意了,就请给个最佳答案,如果还不如意,请提出存在的问题,我继续改进
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



还是不对。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

刚下班回来,又仔细查看了我前面发的程序,确实存在错误没有修改: 1、choice2 应该是 char 型;2、choice1 输入后,没有吸收回车,导致后面输入字符时,总是将这个回车赋给了 choice2;3、输入 choice2 时,使用的控制符不正确;4、比较字符时,要加单引号


  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int m,e,choice1;
  5.     char choice2;                // 由于接收的是字符
  6.     double a,price,cost;
  7.     printf("Enter how much gas a = ");
  8.     scanf("%lf",&a);
  9.     printf("90# gas seclet 90\n");
  10.     printf("93# gas select 93\n");
  11.     printf("97# gas select 97\n");
  12.     printf("Enter choice1: ");
  13.     scanf("%d",&choice1);
  14.     getchar();                     //吸收回车键, 此语句最为关键
  15.             
  16.     switch(choice1)
  17.     {
  18.     case 90:price=6.95 * a;break;
  19.     case 93:price=7.44 * a;break;
  20.     case 97:price=7.93 * a;break;
  21.     default:price=0.00;break;
  22.     }
  23.     printf("%.2f\n",price);      // 没有优惠时该付金额
  24.    
  25.     printf("self-service select m\n");
  26.     printf("ancillary-service select e\n");
  27.     printf("Enter choice2: ");
  28.     scanf("%c",&choice2);        // 接收字符,用了 %d
  29.     getchar();                   // 吸收回车键,你的错误主要在此,你输入的是字符,回车也是字符哟~~
  30.             
  31.     if(choice2 == 'm')           // 单引号不能少
  32.     {
  33.         price = (1 - 0.05) * price;
  34.     }
  35.     else if(choice2 == 'e')      // 单引号不能少
  36.     {
  37.         price = (1 - 0.03) * price;
  38.     }

  39.         printf("\n");
  40.         printf("You need pay %.2lf yuan\n",price);
  41.     return 0;
  42. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那int e,m;用不着啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

人家的程序里用了,没有大问题,我不能随便就给人家去掉了,是吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不好意思,这几天事情比较多,现在才看到,这次运行对了,多谢帮忙!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不必客气,刚开始学习,谁都有不知所措的时候。有问题尽管来求助,论坛的朋友们会热心帮助你的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 18:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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