[C] Ayuda Codigo
-
Hola amigos, estoy haciendo un programita q me lea de dos archivos llamados empleados y novedad, datos de tipo struct (los compara por legajo) y con ellos me genere un archivo Actualizado y me muestre por pantalla un listado.
Mi problema es que las variables de legajo estan diferentes (O cargan cosas aparte del numero del legajo xxxxx) y entonces no entran al ciclo y por ende no acumalan.
No se si me explico.
Imploroalgun alma caritativa q me de una mano ya q me estoy volviendo loco con este tema y no puedo solucionarlo.
Este es el Codigo:Muchisimas Gracias por anticipado y espero puedan ayudarme.Código:#include
#include #include #include #define COEFHE 0.005 /*Coeficiente de Horas Extra*/ #define COEFIN 0.05 /*Coeficiente de Inasistencias*/ struct empleado{ char legajo[5]; char nombre[25]; float sueldo; float salario; int obrasocial; float tablaimp[12]; float importeneto; char fechai[10]; char fechaeg[10];}e; struct dato{ int horas; int dias; char fecha[10];}; struct novedades{ char legajo[5]; int codigo; dato datonov;}n; FILE *empleados; FILE *novedad; FILE *actualizado; char legajoact[5]; int canthorasextra, i, cantausencias; float importehorasextra, descxinasist, descxobras,descxjuv,total; int main() { empleados = fopen("empleados","r"); if (empleados==NULL) { printf( "No se puede abrir el fichero empleados.\n" ); getch(); exit(1); } novedad = fopen("novedad","r"); if (novedad==NULL) { printf( "No se puede abrir el fichero novedad.\n" ); getch(); exit(1); } actualizado=fopen("actualizado","w"); printf ("::: Informe de LIQUIDACION :::\n"); if (fread(&e,sizeof(e),1,empleados)); while (!feof(empleados)) { fread(&n,sizeof(n),1,novedad); strcpy (legajoact, n.legajo); canthorasextra = 0; cantausencias = 0; while (!feof(novedad) && !strcmp(n.legajo,legajoact) && !strcmp(e.fechaeg,"0")){ /*!strcmp(e.fechaeg,"0") != 0 si la fecha de egreso = 0 (NO EGRESO)*/ if (n.codigo == 1) strcpy(e.fechaeg,n.datonov.fecha); else if (n.codigo == 2) canthorasextra += n.datonov.horas; else cantausencias += n.datonov.dias; fread(&n,sizeof(n),1,novedad);} importehorasextra = e.sueldo * COEFHE * canthorasextra; descxinasist = e.sueldo * COEFIN * cantausencias; descxobras = (e.sueldo+importehorasextra-descxinasist)*(e.obrasocial+2)/10+0; /*Obra Social es 0 o 1; +2 /100 da 2% y 3% relativamente*/ descxjuv = descxobras * 13 / 100; total = e.sueldo + importehorasextra - descxinasist - descxobras - descxjuv; for (i=11; i>0; i--) e.tablaimp[i] = e.tablaimp[i-1]; e.tablaimp[0] = total; printf ("Legajo Numero: %10s\n", e.legajo); printf ("Nombre: %10s\n", e.nombre); printf ("Sueldo Basico: %10.2f\n", e.sueldo); printf ("Importe de Horas Extras: %10.2f\n", importehorasextra); printf ("Descuento por Inasistencias: %10.2f\n", descxinasist); printf ("Salario Familiar: %10.2f\n", e.salario); printf ("Descuento por Obra Social: %10.2f\n", descxobras); printf ("Descuento de Juvilacion: %10.2f\n", descxjuv); printf ("TOTAL a Cobrar: %10.2f\n\n", total); fwrite (&e,sizeof(e),1,actualizado); /* Graba el Empleado Actual en el Archivo Actualizado*/ fread(&e,sizeof(e),1,empleados);} /* Lee el Siguiente empleado*/ fclose (actualizado); fclose (empleados); fclose (novedad); getch(); }
Mushas Gracias
Nacho. -
Hace mucho que no toco C pero por lo que vi no esta mal o no encontre error a simple vista, cuando llegue acasa con el libraco de referencia para chequear con mas detalles me fijo y te digo...
Pero por lo que decis:Fiajte bien como pasas los valores si por referencia o por valor eso tambien puede ser una de las causas de por que sucede eso...Mi problema es que las variables de legajo estan diferentes (O cargan cosas aparte del numero del legajo xxxxx) y entonces no entran al ciclo y por ende no acumalan. -
Gracias Rengo por tu tiempo y por contestar, y espero q leas esto antes d ponerte a hacer nada porq ya encontre los errores. Estaba usando chars de [5] con strings de 5 caracteres... deberian haber sido de [6], y eso me revolucionaba todo.
De vuelta muxas gracias
Salu2
Nacho
