Pero no me graba el archivos Femeninas y me muestra mal, que puede ser?
main.c
Código:
#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
Código:
#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