Cxw1234a 2022-02-10 17:36 采纳率: 42.9%
浏览 23
已结题

这里已经使用while(getchar()!='\n')来抛弃多余的字符和换行了,为啥第二次输入时会进入default选项


#include<stdio.h>
#define EXTRA_HOUR 1.5
#define BASE_TAX 0.15
#define EXTRA_TAX 0.2
#define EXCEED_TAX 0.25

void show_menu(void);
void cal_salary(float base_salary,float hours);

int main(void)
{
  float hours = 0;
  char selected;
  do
  {
    show_menu();
    selected = getchar();
    while( (getchar()) != '\n')
      continue;
    switch(selected)
    {
      case '1':
       printf("$8.75/hr,Enter the work hours:");
       scanf("%f",&hours);
       cal_salary(8.75,hours);
       break;
      case '2':
       printf("$9.33/hr,Enter the work hours:");
       scanf("%f",&hours);
       cal_salary(9.33,hours);
       break;
      case '3':
       printf("$10.00/hr,Enter the work hours:");
       scanf("%f",&hours);
       cal_salary(10.00,hours);
       break;
      case '4':
       printf("$11.20/hr,Enter the work hours:");
       scanf("%f",&hours);
       cal_salary(11.20,hours);
       break;
      case '5':
       break;
      default:
       printf("Error,please retry!\n");
       break;
    }
  }while(selected != '5');
  printf("Done\n");
  return 0;
}

void show_menu(void)
{
  char s1[] = "1) $8.75/hr";
  char s2[] = "2) $9.33/hr";
  char s3[] = "3) $10.00/hr";
  char s4[] = "4) $11.20/hr";
  char s5[] = "5) quit";

  printf("***************************************************************\n");
  printf("Enter the number corresponding to the desired pay rate or action\n");
  printf("%-40s%-40s\n",s1,s2);
  printf("%-40s%-40s\n",s3,s4);
  printf("%-40s\n",s5);
  printf("***************************************************************\n");
}

void cal_salary(float base_salary,float hours)
{
  float salary,tax;
  if(hours<=40)
  {
    salary = hours*base_salary;
    if(salary > 300)
    {
      tax = 300*BASE_TAX + (salary-300)*EXTRA_TAX;
    }
    else
    {
      tax = salary*BASE_TAX;
    }
  }
  else
  {
    salary = 40*base_salary + (hours-40)*EXTRA_HOUR*base_salary;
    if(salary<450)
    { 
      tax = 300*BASE_TAX + (salary-300)*EXTRA_TAX;
    }
    else
    {
      tax = 300*BASE_TAX + 150*EXTRA_TAX + (salary-450)*EXCEED_TAX;
    }
  }
  printf("salary before tax is:%.2f tax is %.2f taxed_salary is:%.2f\n",salary, tax, salary-tax);
  printf("continue...\n");
}

输出如下:

img

  • 写回答

1条回答 默认 最新

  • 泡视界 2022-02-10 18:30
    关注

    因为你去除了selected = getchar();的多余字符,
    但是没有去除后续scanf的多余字符,
    在你的switch结束后,do while里侧,在添加一个去除多余字符的操作以处理scanf的多余字符就好。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月19日
  • 已采纳回答 2月11日
  • 创建了问题 2月10日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题