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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  No crea un nuevo archivo de personas del sexo femenino
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No crea un nuevo archivo de personas del sexo femenino  (Leído 1,365 veces)
andoporto

Desconectado Desconectado

Mensajes: 17


Ver Perfil
No crea un nuevo archivo de personas del sexo femenino
« 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
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(&reg, sizeof(t_info), 1, fpBin);
    while(!feof(fpBin))
    {
        if(reg.sex=='F' && !pilaLLena(&pila))
        {
            apilar(&pila, &reg);
            printf("%s \n", reg.ape);
        }
        fread(&reg, sizeof(t_info), 1, fpBin);
    }
    fclose(fpBin);

    if(!abrirArchivo(&fpFem, "Femeninas", "w+b", MSG))
        return 1;
    while(!pilaVacia(&pila))
    {
        sacarDePila(&pila, &reg);
        printf("%s \n", reg.ape);
        fwrite(&reg, 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(&reg, 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(&reg, 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(&reg, 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







En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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