Un programa de C "sueldos"

Estoy entrando a esto del c#, y en una practica me pidieron que hiciera este programa.
Escriba una función que calcule el nuevo sueldo de un empleado cuyo aumento de sueldo depende de la siguiente tabla:
Categoría Aumento
A Aumentar 800 pesos al sueldo actual
B, C 13 % del sueldo actual
D 25 % del sueldo actual
Escriba un programa principal que lea los siguientes datos correspondientes a 10 empleados:
. Num. De Nomina
. Nombre
. Categoría
. Sueldo actual
. Sueldo nuevo
Dentro del programa principal imprima el num. De nomina y el nuevo sueldo de cada empleado (utilice la función anterior para el calculo del nuevo sueldo). Utilice además, un arreglo de estructuras para almacenar los datos.
---------------------------
Esto es lo que hice, pero resulta que al llegar al 10 después de ingresar la categoría me marca un error, ¿puedes revisar mi código?
--
/*GGO
Calcular....
*/
#include <stdio.h>
//Prototipo de la funcion
double nuevoSueldo (float sueldoActual1, int categoria1);
//Definicion de la estructura
struct empleado {
int numNomina;
char nombre [25];
int categoria;
float sueldoActual;
double sueldoNuevo;
};
void main ()
{
double nSuel;
int i;
struct empleado varEmpleado[10];
puts("*******************************************");
puts("Programa de Aumentos. 10 Empleados");
puts("*******************************************\n");
for(i=1; i<11; i++){
printf("%i-Nombre de empleado :", i);
scanf("%s", &varEmpleado.nombre);
printf("\nNumero de Nomina:");
scanf("%i", &varEmpleado.numNomina);
puts("\nElige una opcion para la categoria:\n");
puts("1-Categoria A");
puts("2-Categoria B");
puts("3-Categoria C");
puts("4-Categoria D");
printf("Categoria:");
scanf("%i", &varEmpleado.categoria);
printf("\nSueldo Actual:");
scanf("%f", &varEmpleado.sueldoActual);
nSuel= nuevoSueldo(varEmpleado.sueldoActual, varEmpleado.categoria);
varEmpleado.sueldoNuevo= nSuel;
printf("\n%s con Numero de Nomina:%i tiene un sualdo actual de:%.2lf\n\n",
varEmpleado.nombre, varEmpleado.numNomina, nSuel);
}
return;
}
//Codigo de la funcion nuevoSueldo
double nuevoSueldo (float sueldoActual1, int categoria1)
{
double aumento;
switch (categoria1)
{
case 1:
aumento= sueldoActual1+800;
break;
case 2:
aumento= sueldoActual1*1.13;
break;
case 3:
aumento= sueldoActual1*1.13;
break;
case 4:
aumento= sueldoActual1*1.25;
break;
default:
aumento= sueldoActual1;
}
return aumento;
}

2 Respuestas

Respuesta
1
el problema es que los arreglos en C# igual que en C, y en C++, empiezan en la intentar 0. Es decir, char arreglo[10], va desde la intentar 0 hasta la 9.
;-)
Por tanto, te peta en la 10... en el momento que esa asignación de memoria no reservada sea critico.
Respuesta
1
El problema esta aquí :
scanf("%i", &varEmpleado.categoria);
Cuando el bucle llega a su décima ejecución, i vale 11, por lo que accede a Varempleado[11]. categoria);
El array solo tiene 10 posiciones, por lo que te da un error por acceder a memoria que no te pertenece .
Una solución seria poner el bucle de 0 a 10 en lugar de 1 a 11

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas