Título: No crea un nuevo archivo de personas del sexo femenino
Publicado por: andoporto en 16 Febrero 2015, 15:58 pm
El programa debe mostrar, en un archivo nuevo, todos los registros de sexo femenino que habian sido apilados mientras leia el archivo binario original y sacados de pila para ser guardados en el nuevo archivo. Pero no me graba el archivos Femeninas y me muestra mal, que puede ser? main.c #include <stdio.h> #include <stdlib.h> #include "dinamica.h" #define MSG 1
void crearArchivo(); int abrirArchivo(FILE **, const char *, const char *, int); void mostrarArchivo(FILE*);
int main() { FILE *fpBin, *fpFem; t_info reg; t_pila pila;
crearArchivo(fpBin); crearPila(&pila); if(!abrirArchivo(&fpBin, "Datos.bin", "rb", MSG)) return 1; printf("\n \n \t \t \t ARCHIVO ORIGINAL \n"); mostrarArchivo(fpBin); rewind(fpBin); fread(®, sizeof(t_info), 1, fpBin); while(!feof(fpBin)) { if(reg.sex=='F' && !pilaLLena(&pila)) { apilar(&pila, ®); printf("%s \n", reg.ape); } fread(®, sizeof(t_info), 1, fpBin); } fclose(fpBin);
if(!abrirArchivo(&fpFem, "Femeninas", "w+b", MSG)) return 1; while(!pilaVacia(&pila)) { sacarDePila(&pila, ®); printf("%s \n", reg.ape); fwrite(®, sizeof(t_info), 1, fpFem); } rewind(fpFem); printf("\n \n \t \t \t ARCHIVO FEMENINO \n"); mostrarArchivo(fpFem); fclose(fpFem); return 0; }
//////funciones void crearArchivo(void) { FILE *fp = fopen("Datos.bin", "wb"); t_info reg[] = {{111, "Palacio", "Rocio", 'F'}, {222, "Sa", "Lia", 'F'}, {333, "Perez", "Roberto", 'M'}, {444, "Sanchez", "Lara", 'F'}, {555, "Castillo", "Luis", 'M'} };
if(fp!=NULL) fwrite(®, sizeof(t_info), 5, fp); fclose(fp); } //// int abrirArchivo(FILE **fp, const char *nombre, const char * modo, int msg) { *fp = fopen("Datos.bin", "rb"); if(*fp==NULL && msg) { printf("error abriendo archivo \n"); return 0; } return 1; } ///// void mostrarArchivo(FILE*fp) { t_info reg; printf("DNI \t Apellido \t Nombre \t Sexo \n"); fread(®, sizeof(reg), 1, fp); while(!feof(fp)) { printf("%d \t %s \t %s \t \t%c \n", reg.dni, reg.ape, reg.nombre, reg.sex); fread(®, sizeof(reg), 1, fp); } } //// dinamica.h #ifndef DINAMICA_H_INCLUDED #define DINAMICA_H_INCLUDED
typedef struct { int dni; char ape[30], nombre[30], sex; } t_info;
typedef struct s_nodo { t_info info; struct s_nodo *sig; } t_nodo;
typedef t_nodo* t_pila;
void crearPila(t_pila *); int apilar(t_pila *, const t_info *); int verTope(const t_pila *, t_info *); int sacarDePila(t_pila *, t_info *); int pilaLLena(const t_pila *); int pilaVacia(const t_pila *); void vaciarPila(t_pila *);
/////FUNCIONES void crearPila(t_pila *p) { *p = NULL; } ///// int apilar(t_pila *p, const t_info *d) { t_nodo * nue= (t_nodo*)malloc(sizeof(t_nodo)); if(nue==NULL) return 0; nue->info=*d; nue->sig=*p; *p=nue; return 1; } ///// int pilaLLena(const t_pila *p) { t_nodo *aux = (t_nodo*)malloc(sizeof(t_nodo)); free(aux); return aux==NULL; } ///// int pilaVacia(const t_pila *p) { return *p==NULL; } ///// int verTope(const t_pila *p, t_info *d) { if(*p==NULL) return 0; *d = (*p)->info; return 1; } ///// int sacarDePila(t_pila *p, t_info *d) { t_nodo *aux; if(*p==NULL) return 0; aux=*p; *d =aux->info; *p=aux->sig; free(aux); return 1; } ///// void vaciarPila (t_pila *p) { t_nodo *aux; while(*p) { aux=*p; *p=aux->sig; free(aux); } }
#endif // DINAMICA_H_INCLUDED
|