La salida a veces falla

Estoy tratando de encontrar el Salario Bruto del Mes usando el progtwig C. Mi salida a veces falla. Poniendo el código y la salida debajo:

#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(); } 

// Ejecutando el progtwig (Salida)

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

// Había seleccionado Personal presionando 1

 Enter numbers of hours work: 

// Ingresé 33 como el número de horas de trabajo

 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) 

El siguiente código propuesto:

  1. elimina las llamadas no portátiles de conio.h
  2. Verifica adecuadamente los errores de scanf()
  3. Formatea el código para facilitar la lectura.
  4. utiliza una instrucción switch() lugar de una serie de instrucciones if()
  5. Declara correctamente los números ‘mágicos’ con nombres significativos
  6. hace uso de una statement de enum para dar a la selección del usuario nombres significativos
  7. declara correctamente todos los valores literales como float lugar del double predeterminado
  8. comstack limpiamente
  9. utiliza una firma válida para la función main()
  10. EDITAR nombrar, etc. corregido por comentarios

Y ahora, el código propuesto:

 #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(); }