输出有时会失败

我正在尝试使用C程序找到月薪总额。 我的输出有时会失败。 将代码和输出放在下面:

#include  #include  void main() { int id; float hours; float mgsalary; clrscr(); printf( " Press ID : \n Press 1 if Staff: \n Press 2 if Supervisor: \n Press 3 if Manager: \n Press 4 if President: \n"); scanf("%d", &id); printf(" Enter hours per week \n"); scanf("%f", &hours); if (id == 1) { printf(" Position ID: 1 \n"); mgsalary = (hours * 62.5) * 4.28; printf(" Positon/Rank: Staff \n"); printf(" Rate per hour: 62.5 php \n"); printf(" Monthly Gross Salary : %f php \n ", mgsalary); } else if (id == 2) { mgsalary = (hours * 125) * 4.28; printf(" Position ID: 2 \n"); printf(" Position/Rank: Supervisor \n"); printf(" Rate per hour: 125 php \n"); printf(" Monthly Gross Salary : %f php \n", mgsalary); } else if (id == 3) { mgsalary = (hours * 187.5) * 4.28; printf(" Position ID: 3 \n"); printf(" Position/Rank: Manager \n"); printf(" Rate per hour: 187.5 php \n"); printf(" Monthly Gross Salary : %f php \n", mgsalary); } else if (id == 4) { mgsalary = (hours * 375) * 4.28; printf(" Position ID: 4 \n"); printf(" Position/Rank: President \n"); printf(" Rate per hour: 375 php \n"); printf(" Monthly Gross Salary: %f php \n", mgsalary); } else printf(" Invalid Input"); getch(); } 

//运行程序(输出)

 Press 1 if Staff: Press 2 if Supervisor: Press 3 if Manager: Press 4 if President: 

//我按1选择了Staff

 Enter numbers of hours work: 

//我已经输入33作为工作小时数

 Position ID: 1 Positon/Rank: Staff Rate per hour: 62.5 php Monthly Gross Salary : 8872.5000 php (sometimes it came out 10000000.000 php or null) 

以下提议的代码:

  1. 消除了conio.h的非可移植调用
  2. 正确检查scanf()错误
  3. 格式化代码以提高可读性
  4. 使用switch()语句而不是一系列if()语句
  5. 正确地用有意义的名字声明’魔术’数字
  6. 使用enum语句为用户选择输入提供有意义的名称
  7. 正确地将所有文字值声明为float而不是默认的double
  8. 干净利落地编译
  9. 使用main()函数的有效签名
  10. 每条评论都修正了编辑命名等

现在,建议的代码:

 #include  // perror(), getchar(), fprintf(), printf(), scanf() //#include  #include  // exit(), EXIT_FAILURE #define WEEKS_PER_MONTH 4.28f #define STAFF_WEEKLY_RATE 62.5f #define SUPERVISOR_WEEKLY_RATE 125.0f #define MANAGER_WEEKLY_RATE 187.5f #define PRESIDENT_WEEKLY_RATE 375.0f enum { dummy, STAFF, SUPERVISOR, MANAGER, PRESIDENT }; int main( void ) { int id; float hours; float mgsalary; int ch; /* clrscr(); Suggest using the ANSI excape sequences */ printf( "%s\n", " Press ID : \n" " Press 1 if Staff: \n" " Press 2 if Supervisor: \n" " Press 3 if Manager: \n" " Press 4 if President: \n"); id = getchar(); printf(" Enter hours per week \n"); if( scanf("%f", &hours) != 1 ) { fprintf( stderr, "scanf for hours failed\n" ); exit( EXIT_FAILURE ); } switch( id ) { case STAFF: printf(" Position ID: 1 \n"); mgsalary = (hours * STAFF_WEEKLY_RATE) * WEEKS_PER_MONTH; printf(" Positon/Rank: Staff \n"); printf(" Rate per hour: 62.5 php \n"); printf(" Monthly Gross Salary : %f php \n ", mgsalary); break; case SUPERVISOR: mgsalary = (hours * SUPERVISOR_WEEKLY_RATE) * WEEKS_PER_MONTH; printf(" Position ID: 2 \n"); printf(" Position/Rank: Supervisor \n"); printf(" Rate per hour: 125 php \n"); printf(" Monthly Gross Salary : %f php \n", mgsalary); break; case MANAGER: mgsalary = (hours * MANAGER_WEEKLY_RATE) * WEEKS_PER_MONTH; printf(" Position ID: 3 \n"); printf(" Position/Rank: Manager \n"); printf(" Rate per hour: 187.5 php \n"); printf(" Monthly Gross Salary : %f php \n", mgsalary); break; case PRESIDENT: mgsalary = (hours * PRESIDENT_WEEKLY_RATE) * WEEKS_PER_MONTH; printf(" Position ID: 4 \n"); printf(" Position/Rank: President \n"); printf(" Rate per hour: 375 php \n"); printf(" Monthly Gross Salary: %f php \n", mgsalary); break; default: printf(" Invalid Menu Selection\n"); break; } /* end switch */ while( (ch = getchar()) != EOF && ch != '\n' ); getchar(); }