输出有时会失败
我正在尝试使用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)
以下提议的代码:
- 消除了
conio.h
的非可移植调用 - 正确检查
scanf()
错误 - 格式化代码以提高可读性
- 使用
switch()
语句而不是一系列if()
语句 - 正确地用有意义的名字声明’魔术’数字
- 使用
enum
语句为用户选择输入提供有意义的名称 - 正确地将所有文字值声明为
float
而不是默认的double
- 干净利落地编译
- 使用
main()
函数的有效签名 - 每条评论都修正了编辑命名等
现在,建议的代码:
#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(); }