Título: No se imprimen los datos almacenados en un archivo
Publicado por: BJM 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. #include<stdio.h> #include<conio.h> #include<ctype.h> typedef struct { int clave; char nombre[35]; char categoria; }ttrabajador; typedef struct{ char categoria; int salario; }tcategoria; void crear(); void salario(); void mostrar(); main(){ crear(); salario(); mostrar(); } void crear(){ FILE *p1; ttrabajador nuevo; int i; p1 =fopen("trabajadores.dat","wb+"); if(p1==NULL){ } printf("\n comienza la carga de registro de trabajadores"); printf("\n___________________________________________\n"); for(i=1;i<4;i++){ nuevo.clave=i; do{ printf("\n categoria (A-D): "); scanf("%c",&nuevo. categoria); nuevo. categoria=toupper(nuevo. categoria); }while(nuevo.categoria<'A'||nuevo.categoria>'D'); fseek(p1 ,sizeof(ttrabajador )*(i -1),SEEK_SET ); fwrite(&nuevo ,sizeof(ttrabajador ),1,p1 ); } printf("\n Listado del archivo recien creado"); for(i=1;i<4;i++){ fseek(p1 ,sizeof(ttrabajador )*(i -1),SEEK_SET ); fread(&nuevo ,sizeof(ttrabajador ),1,p1 ); printf("\n clave: %d",nuevo. clave); printf("\n nombre: %s", nuevo. nombre); printf("\n categoria:%c",nuevo. categoria); printf("\n______________________________\n"); } } void salario(){ FILE *p2; tcategoria ficha; int i=0; char categoria; p2 =fopen("salario.dat","wb+"); while(i<4){ ficha.categoria='0'; ficha.salario=0; fwrite(&ficha ,sizeof(tcategoria ),1,p2 ); i++; } do{ do{ printf("\n Introduce categoria(A-D)/0(cero) para fin: "); }while((categoria!='0')&&(categoria<'A'||categoria>'D')); if(categoria!='0'){ fseek(p2 ,sizeof(tcategoria )*(categoria -65),SEEK_SET ); fread(&ficha ,sizeof(tcategoria ),1,p2 ); if(ficha.categoria!='0'){ printf("\n categoria ya introducida"); } else{ ficha.categoria=categoria; printf("\n Introduce sueldo: "); scanf("%d",&ficha. salario); fseek(p2 ,sizeof(tcategoria )*(categoria -65),SEEK_SET ); fwrite(&ficha ,sizeof(tcategoria ),1,p2 ); } } }while(categoria!='0'); printf(" Listado del archivo salario"); for(i=0;i<4;i++){ fseek(p2 ,sizeof(tcategoria )*(i ),SEEK_SET ); fread(&ficha ,sizeof(tcategoria ),1,p2 ); printf("\n categoria: %c",ficha. categoria); printf("\n sueldo: %d",ficha. salario); } } void mostrar(){ FILE *p1; FILE *p2; ttrabajador ficha1; tcategoria ficha2; int clave; p1 =fopen("trabajadores.dat","rb+"); p2 =fopen("salario.dat","rb+"); if(p1==NULL){ printf("\n No se puede abrir trabajadores.dat"); } else{ if(p2==NULL){ printf("\n no se puede abrir salario.dat"); } else { printf("\n\n Clave nombre categoria salario"); printf("\n********************************************\n"); fread(&ficha1 ,sizeof(ttrabajador ),1,p1 ); printf("%10c",ficha1. categoria); fseek(p2 ,sizeof(tcategoria )*(ficha1. categoria-65),SEEK_SET ); fread(&ficha2 ,sizeof(tcategoria ),1,p2 ); printf("%15d",ficha2. salario); } } } }
Título: Re: No se imprimen los datos almacenados en un archivo
Publicado por: durasno en 23 Noviembre 2012, 04:03 am
Hola! el problema de imprimir basura nose porque es, pero el bucle infinito puede ser por esto: fread(&ficha1 ,sizeof(ttrabajador ),1,p1 ); printf("%10c",ficha1. categoria); fseek(p2 ,sizeof(tcategoria )*(ficha1. categoria-65),SEEK_SET ); fread(&ficha2 ,sizeof(tcategoria ),1,p2 ); printf("%15d",ficha2. salario); }
te falto incluir dentro del while otra vez: fread(&ficha1 ,sizeof(ttrabajador ),1,p1 );
Saludos
|