Cxw1234a 2022-02-08 18:01 采纳率: 42.9%
浏览 27

如下程序,第一次正常运行后,后面的循环一直进入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();
    scanf("%c",&selected);
    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");
}

运行结果:


Enter the number corresponding to the desired pay rate or action

  1. $8.75/hr 2) $9.33/hr
  2. $10.00/hr 4) $11.20/hr
  3. quit

2
$9.33/hr,Enter the work hours:100
salary before tax is:1212.90 tax is 265.73 taxed_salary is:947.18
continue...


Enter the number corresponding to the desired pay rate or action

  1. $8.75/hr 2) $9.33/hr
  2. $10.00/hr 4) $11.20/hr
  3. quit

Error,please retry!


Enter the number corresponding to the desired pay rate or action

  1. $8.75/hr 2) $9.33/hr
  2. $10.00/hr 4) $11.20/hr
  3. quit

Error,please retry!


Enter the number corresponding to the desired pay rate or action

  1. $8.75/hr 2) $9.33/hr
  2. $10.00/hr 4) $11.20/hr
  3. quit

  • 写回答

1条回答 默认 最新

  • [PE]经典八炮 2022-02-08 18:28
    关注

    46行后面加一句:
    getchar();
    否则的话换行符会被当作字符读取。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月8日

悬赏问题

  • ¥15 网站设计与开发职业技能大赛试题
  • ¥20 在使用CESM2.2.0模型进行case.submit过程中出现如下错误(关键词-Map)
  • ¥15 有办法改变通过wifi进入的网站的设置吗
  • ¥15 所以到底怎么算!算到凌晨五点都算不出来!
  • ¥15 label_studio
  • ¥15 请教如何phython发邮件
  • ¥15 linux系统安装问题
  • ¥15 路径规划如何采用矢量法让他们尽量在一个方向
  • ¥15 crypto 一道rsa解密题
  • ¥15 survIDINRI已将生存时间转为数值变量,仍错误 Time variable is not numeric。