Realizando estos cambios el programa me devuelve resultados, de hecho sin estos cambios me da error de compilación relacionado con el tipo con el que está declarado la variable frente al tipo que se pasa a la función scanf. Posiblemente estemos usando distintos compiladores o distintas configuraciones, de ahí que a tí te permita ejecutarlo.
Antes:
scanf("%f", &salario_semanal);
scanf("%f", &salario_hora);
scanf("%f",&ventas_brutas);
scanf("%f", &salario_pieza);
Ahora:
scanf("%lf", &salario_semanal);
scanf("%lf", &salario_hora);
scanf("%lf",&ventas_brutas);
scanf("%lf", &salario_pieza);
Código:
// Ejercicio 4.28: Pago semanal de empleados usando switch //
#include <stdio.h>
int main()
{
int opcion , horas_trabajadas, num_piezas;
double salario_semanal, salario_hora, ventas_brutas, salario_pieza;
printf("1- Administrador\n2- Pago por hora\n3- Pago por comisi%cn\n4- Pago por destajo\n\nPor favor introduzca el c%cdigo de pago del empleado (EOF para finalizar): ", 162, 162);
while ( (opcion = getchar() ) != EOF ) {
salario_semanal=0;
switch (opcion) {
case '1':
printf("Por favor introduzca el salario semanal de este empleado: ");
scanf("%lf", &salario_semanal);
printf("\nEl salario semanal de este empleado es de: %.2f euros\n\n", salario_semanal);
break;
case '2': printf("Por favor introduzca el n%cmero de horas trabajadas: ", 163);
scanf("%d", &horas_trabajadas);
printf("Por favor introduzca el salario por hora: ");
scanf("%lf", &salario_hora);
if (horas_trabajadas > 40)
salario_semanal = (salario_hora * 40) + ( salario_hora * 1.5 ) * ( horas_trabajadas % 40 );
else
salario_semanal = salario_hora * 40;
printf("\nEl salario semanal de este empleado es de: %.2f euros\n\n", salario_semanal);
break;
case '3': printf("Por favor introduzca las ventas brutas realizadas: ");
scanf("%lf",&ventas_brutas);
salario_semanal = 250 + (ventas_brutas * 0.057);
printf("\nEl salario semanal de este empleado es de: %.2f euros\n\n", salario_semanal);
break;
case '4': printf("Por favor introduzca el n%cmero de piezas producidas: ",163);
scanf("%d", &num_piezas);
printf("Por favor introduzca el salario por pieza: ");
scanf("%lf", &salario_pieza);
salario_semanal = salario_pieza * num_piezas;
printf("\nEl salario semanal de este empleado es de: %.2f euros\n\n", salario_semanal);
break;
case '\n':
case '\t':
case ' ':
break;
default:
printf("\nC%cdigo incorrecto\n\n", 162);
break;
} // fin switch
printf("Por favor introduzca el c%cdigo de otro empleado o EOF para finalizar: ", 162);
} // fin while //
//system("pause");
return 0;
}