簡體   English   中英

輸出有時會失敗

[英]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)

以下建議的代碼:

  1. 消除了conio.h的非便攜式調用
  2. 正確檢查scanf()錯誤
  3. 格式化代碼以提高可讀性
  4. 使用switch()語句而不是一系列的if()語句
  5. 使用有意義的名稱正確聲明“魔術”數字
  6. 利用enum語句為用戶選擇輸入有意義的名稱
  7. 正確地將所有文字值聲明為float而不是默認的double
  8. 干凈地編譯
  9. main()函數使用有效的簽名
  10. 編輯命名,按評論更正等

現在,建議的代碼為:

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM