[英]Output sometimes fail
我正在嘗試使用C程序查找月薪總額。 我的輸出有時會失敗。 將代碼和輸出放在下面:
#include <stdio.h>
#include <conio.h>
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 <stdio.h> // perror(), getchar(), fprintf(), printf(), scanf()
//#include <conio.h>
#include <stdlib.h> // 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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.