[C] Ayuda Codigo

      • 152
      • mensajes
      • miembro desde
      • 09/08/03
    24/11/2004
    #1 [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.
    Imploro algun alma caritativa q me de una mano ya q me estoy volviendo loco con este tema y no puedo solucionarlo.
    Este es el Codigo:

    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();
    }
    Muchisimas Gracias por anticipado y espero puedan ayudarme.
    Mushas Gracias
    Nacho.
  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    2 comentarios / 1163 Visitas

      • 5,546
      • mensajes
      • miembro desde
      • 07/11/02
    25/11/2004
    #2 Re: [C] Ayuda Codigo

    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:

    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.
    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...
      • 152
      • mensajes
      • miembro desde
      • 09/08/03
    25/11/2004
    #3 Re: [C] Ayuda Codigo

    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