• Domingo 8 de Septiembre de 2024, 03:02

Autor Tema:  Me Sobreescribe Los Datos  (Leído 1034 veces)

kizami

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Me Sobreescribe Los Datos
« en: Lunes 10 de Septiembre de 2007, 04:22 »
0
Hola amigos, espero que me puedan ayudar con un problema que tengo:

Hice un programa que captura los datos de 5 empleados donde debe incluir nombre, apellido paterno, apellido materno y datos de los 3 trabajos mas recientes en los que ha laborado donde debe de especificarse nombre de la empresa, del jefe y fecha de inicio y final del trabajo.

Esto lo hice por medio de estructuras: una para el empleado y sus datos, otra para el trabajo y una ultima para la fecha.

El problema es que me sobrescribe los datos del trabajo y me despliega los ingresados en el ultimo empleado para todos los demas.

Aqui el codigo:

Código: Text
  1.  
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #include<dos.h>
  6. #include<iostream.h>
  7.  
  8. int x,y;
  9.  
  10.  
  11.   struct fecha{   //estructura para fecha
  12.     int dia,mes,ano;
  13.     }feci,fect;
  14.  
  15.  
  16.   struct trabajo{     //estructura para indicar los trabajos del empleado
  17.     char nomempr[30],nomjef[30];
  18.     struct fecha pertrab;
  19.     }trab[3];
  20.  
  21.        struct empleado{     //estructura para datos del empleado
  22.     char nombre[15],apepat[15],apemat[15];
  23.     struct trabajo work;
  24.     }emp[5];
  25.  
  26.  
  27.  
  28.  
  29. void main (void)     //comienza programa principal
  30. {
  31.  
  32.   clrscr();
  33.    
  34.  
  35.         for(x=1;x<=5;x++)
  36.   {
  37.   fflush(stdin);
  38.   printf("Datos del empleado: %d ",x);
  39.   printf("\n\nNombre del empleado: ");
  40.   gets(emp[x].nombre);
  41.   printf("\nApellido paterno del empleado: ");
  42.   gets(emp[x].apepat);
  43.   printf("\nApellido materno del empleado: ");
  44.   gets(emp[x].apemat);
  45.   for(y=1;y<=3;y++)
  46.   {
  47.   fflush(stdin);
  48.   printf("\n\nDatos del trabajo: %d",y);
  49.   printf("\n\nNombre de la empresa donde trabajo: ");
  50.   gets(trab[y].nomempr);
  51.   printf("\nNombre del jefe para el que trabajaba: ");
  52.   gets(trab[y].nomjef);
  53.   printf("\n\nFecha en que inici¢ a laborar: \n");
  54.   printf("\nDia: ");
  55.   scanf("%d",&feci.dia);
  56.   printf("\nMes: ");
  57.   scanf("%d",&feci.mes);
  58.   printf("\nAno: ");
  59.   scanf("%d",&feci.ano);
  60.   printf("\n\nFecha en que termin¢ de laborar: \n");
  61.   printf("\nDia: ");
  62.   scanf("%d",&fect.dia);
  63.   printf("\nMes: ");
  64.   scanf("%d",&fect.mes);
  65.   printf("\nAno: ");
  66.   scanf("%d",&fect.ano);
  67.   }
  68.        getch();
  69.        clrscr();
  70.        }
  71.      
  72.   for(x=1;x<=5;x++)
  73.   {
  74.   printf("Los datos capturados fueron: \n");
  75.   printf("\n\nNombre del empleado: ");
  76.   puts(emp[x].nombre);
  77.   printf("\nApellido paterno del empleado: ");
  78.   puts(emp[x].apepat);
  79.   printf("\nApellido materno del empleado: ");
  80.   puts(emp[x].apemat);
  81.   for(y=1;y<=3;y++)
  82.   {
  83.   printf("\n\nDatos del trabajo: %d",y);
  84.   printf("\n\nNombre de la empresa donde trabajo: ");
  85.   puts(trab[y].nomempr);
  86.   printf("\nNombre del jefe para el que trabajaba: ");
  87.   puts(trab[y].nomjef);
  88.  
  89.   printf("\nFecha en que inici¢ a laborar: %d/%d/%d",feci.dia,feci.mes,feci.ano);
  90.   printf("\nFecha en que termin¢ de laborar: %d/%d/%d",fect.dia,fect.mes,fect.ano);
  91.   }
  92.   getch();
  93.   clrscr();
  94.   }
  95.  
  96. }
  97.  
  98.  

Espero que me puedan ayudar

daltomi

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Me Sobreescribe Los Datos
« Respuesta #1 en: Martes 11 de Septiembre de 2007, 15:07 »
0
Tienes, en primera instancia, errores en las estructuras repetitivas "for".
Mira esta prueba:
Código: Text
  1.  
  2. /* 1° iteracion x: admite rango emp[0..4] */
  3.   x = 1 -> emp[x] == emp[1]
  4.   /* 1° iteración y: admite rango trab[0..2] */
  5.     y = 1 -> trab[y] == trab[1]
  6.     /* 2° iteración y: */
  7.     y = 2 -> trab[y] == trab[2]
  8.     /* 3° iteración y: */
  9.     y = 3 -> trab[y] == trab[3] //error, fuera de rango.
  10.  
  11. /* 2° iteración x: admite rango emp[0..4]*/
  12.   x = 2 -> emp[x] == emp[2]
  13.   /* 1° iteración y: admite rango trab[0..2]*/
  14.     // ¡Atención! Se pierden los datos de la primera iteración x.
  15.     y = 1 -> trab[y] == trab[1]
  16.     /* 2° iteración y: */
  17.     y = 2 -> trab[y] == trab[2]
  18.     /* 3° iteración y: */
  19.     y = 3 -> trab[y] == trab[3] //error, fuera de rango.
  20.  
  21. etc...........
  22.  
  23.  
1. Si declaras un vector, el índice comienza en 0(cero) no en 1.
2. En la segunda iteración de x la var. y vuelve a 1(ver item anterior), eliminado la info. antes obtenida.

Saludos.

Ithilien

  • Miembro MUY activo
  • ***
  • Mensajes: 116
    • Ver Perfil
Re: Me Sobreescribe Los Datos
« Respuesta #2 en: Martes 11 de Septiembre de 2007, 15:09 »
0
De primeras, no sé como no te peta el programa pues los rangos son de 0 a 4 y tú lo haces de 1 a 5. Recuerda que si tienes struct empleado emp[5], va de 0..4, por ejemplo.

Y después, tienes un strcut trabajo que no utilizas en empleado....es algo raro. Usas un vector de trabajos que definiste...deberías revisar el código!

Y respecto a las fechas, vas sobrescribiendolas en cada iteracion del bucle for, ya que solo tienes dos estructuras de este tipo y las machacas en cada iteracion.

Saludos!