elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No se imprimen los datos almacenados en un archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No se imprimen los datos almacenados en un archivo  (Leído 1,968 veces)
BJM

Desconectado Desconectado

Mensajes: 41


Ver Perfil
No se imprimen los datos almacenados en un archivo
« en: 21 Noviembre 2012, 16:58 pm »

El problema esta en la funcion void mostrar(); la cual se encarga de imprimir todos los datos almacenados en 2 archivos llamados "trabajadores.dat" y "salario.dat", pero se me imprimen de manera infinita codigos ilegibles, he chequeado muchas veces la funcion y no encuentro el error.

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<ctype.h>
  4.  
  5. typedef struct {
  6.        int clave;
  7.        char nombre[35];
  8.        char categoria;
  9.        }ttrabajador;
  10.  
  11. typedef struct{
  12.        char categoria;
  13.        int salario;
  14.        }tcategoria;
  15.  
  16. void crear();
  17. void salario();
  18. void mostrar();
  19.  
  20. main(){
  21.       crear();
  22.       salario();
  23.       mostrar();
  24.       }
  25.  
  26. void crear(){
  27.       FILE *p1;
  28.       ttrabajador nuevo;
  29.       int i;
  30.       p1=fopen("trabajadores.dat","wb+");
  31.       if(p1==NULL){
  32.       printf("\n error");
  33.       }
  34.       printf("\n comienza la carga de registro de trabajadores");
  35.       printf("\n___________________________________________\n");
  36.       for(i=1;i<4;i++){
  37.        printf("\n clave: %d",i);
  38.        nuevo.clave=i;
  39.        printf("\n nombre: ");
  40.        gets(nuevo.nombre);
  41.        fflush(stdin);
  42.        do{
  43.          printf("\n categoria (A-D): ");
  44.          scanf("%c",&nuevo.categoria);
  45.          fflush(stdin);
  46.          nuevo.categoria=toupper(nuevo.categoria);
  47.          }while(nuevo.categoria<'A'||nuevo.categoria>'D');
  48.          fseek(p1,sizeof(ttrabajador)*(i-1),SEEK_SET);
  49.          fwrite(&nuevo,sizeof(ttrabajador),1,p1);
  50.          }
  51.  
  52.       printf("\n");
  53.       printf("\n Listado del archivo recien creado");
  54.       for(i=1;i<4;i++){
  55.       fseek(p1,sizeof(ttrabajador)*(i-1),SEEK_SET);
  56.       fread(&nuevo,sizeof(ttrabajador),1,p1);
  57.       printf("\n clave: %d",nuevo.clave);
  58.       printf("\n nombre: %s", nuevo.nombre);
  59.       printf("\n categoria:%c",nuevo.categoria);
  60.       printf("\n______________________________\n");
  61.       getch();
  62.       }
  63.       fclose(p1);
  64.       getch();
  65.       }
  66.  
  67. void salario(){
  68.     FILE *p2;
  69.     tcategoria ficha;
  70.     int i=0;
  71.     char categoria;
  72.     p2=fopen("salario.dat","wb+");
  73.  
  74.     while(i<4){
  75.      ficha.categoria='0';
  76.      ficha.salario=0;
  77.      fwrite(&ficha,sizeof(tcategoria),1,p2);
  78.      i++;
  79.      }
  80.      rewind(p2);
  81.      printf("\n\n");
  82.      do{
  83.       fflush(stdin);
  84.           do{
  85.             printf("\n Introduce categoria(A-D)/0(cero) para fin: ");
  86.             scanf("%c",&categoria);
  87.             categoria=toupper(categoria);
  88.             fflush(stdin);
  89.             }while((categoria!='0')&&(categoria<'A'||categoria>'D'));
  90.             if(categoria!='0'){
  91.             fseek(p2,sizeof(tcategoria)*(categoria-65),SEEK_SET);
  92.             fread(&ficha,sizeof(tcategoria),1,p2);
  93.             if(ficha.categoria!='0'){
  94.             printf("\n categoria ya introducida");
  95.             }
  96.             else{
  97.             ficha.categoria=categoria;
  98.             printf("\n Introduce sueldo: ");
  99.             scanf("%d",&ficha.salario);
  100.             fflush(stdin);
  101.             fseek(p2,sizeof(tcategoria)*(categoria-65),SEEK_SET);
  102.             fwrite(&ficha,sizeof(tcategoria),1,p2);
  103.             }
  104.               }
  105.                 }while(categoria!='0');
  106.  
  107.           printf("\n\n");
  108.           printf(" Listado del archivo salario");
  109.           for(i=0;i<4;i++){
  110.           fseek(p2,sizeof(tcategoria)*(i),SEEK_SET);
  111.           fread(&ficha,sizeof(tcategoria),1,p2);
  112.           printf("\n categoria: %c",ficha.categoria);
  113.           printf("\n sueldo: %d",ficha.salario);
  114.           }
  115.           fclose(p2);
  116.           getch();
  117.           }
  118.  
  119.    void mostrar(){
  120.  
  121.         FILE *p1;
  122.         FILE *p2;
  123.         ttrabajador ficha1;
  124.         tcategoria ficha2;
  125.         int clave;
  126.  
  127.    p1=fopen("trabajadores.dat","rb+");
  128.    p2=fopen("salario.dat","rb+");
  129.  
  130.    if(p1==NULL){
  131.    printf("\n No se puede abrir trabajadores.dat");
  132.               }
  133.                 else{
  134.                      if(p2==NULL){
  135.                      printf("\n no se puede abrir salario.dat");
  136.                      }
  137.                      else
  138.                      {
  139.                   printf("\n\n Clave     nombre     categoria     salario");
  140.                   printf("\n********************************************\n");
  141.                   fread(&ficha1,sizeof(ttrabajador),1,p1);
  142.                   while(!feof(p1)){
  143.                   printf("%-4d",ficha1.clave);
  144.                   printf("%20s",ficha1.nombre);
  145.                   printf("%10c",ficha1.categoria);
  146.                   fseek(p2,sizeof(tcategoria)*(ficha1.categoria-65),SEEK_SET);
  147.                   fread(&ficha2,sizeof(tcategoria),1,p2);
  148.                   printf("%15d",ficha2.salario);
  149.                   }
  150.                   fclose(p1);
  151.                   fclose(p2);
  152.                   }
  153.                      }
  154.                        getch();
  155.                           }
  156.  


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: No se imprimen los datos almacenados en un archivo
« Respuesta #1 en: 23 Noviembre 2012, 04:03 am »

Hola! el problema de imprimir basura nose porque es, pero el bucle infinito puede ser por esto:
Código
  1.                   fread(&ficha1,sizeof(ttrabajador),1,p1);
  2.                   while(!feof(p1)){
  3.                   printf("%-4d",ficha1.clave);
  4.                   printf("%20s",ficha1.nombre);
  5.                   printf("%10c",ficha1.categoria);
  6.                   fseek(p2,sizeof(tcategoria)*(ficha1.categoria-65),SEEK_SET);
  7.                   fread(&ficha2,sizeof(tcategoria),1,p2);
  8.                   printf("%15d",ficha2.salario);
  9.                   }
te falto incluir dentro del while otra vez:
Código
  1. fread(&ficha1,sizeof(ttrabajador),1,p1);


Saludos



En línea

Ahorrate una pregunta, lee el man
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines