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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  guardar estructuras en ficheros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: guardar estructuras en ficheros  (Leído 3,809 veces)
pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
guardar estructuras en ficheros
« en: 22 Abril 2014, 03:50 am »

Hola, no entiendo porque en mi programa no se me guardan las estructuras cuando pongo esto:

Código:
fwrite(&p, sizeof(p), 1, pf);

siendo p una variable de una estructura, les dejo el codigo del programa a medio hacer:

Código:
#include <stdio.h>

typedef struct producto{
    int numSerie;
    char nombre[20];
    char descripcion[100];
    int precio;
}producto;

void imprimirMenu(void);
void nuevoProducto(char nombreArchivo[]);
//borrarProducto();
//modificarProducto();
//verProducto(char nombreArchivo[]);

int main(){

    char nombreArchivo[20]="productos.dat";

    int r=0;

    do{

    r=0;
    int opcion;

    system("cls");
    imprimirMenu();

    fflush(stdin);
    scanf("%d", &opcion);

    switch (opcion) {

        case 1: nuevoProducto(nombreArchivo);
                break;
        case 4: verArchivo(nombreArchivo);
                break;



    }

    printf("\n\nOtra? ");
    scanf("%d", &r);



    }while(r==1);


    printf("\n\n");

    return 0;
}


void imprimirMenu(void){

    system("cls");
    printf("----Data Productos----");
    printf("\n\n-Menu:");
    printf("\n1.Nuevo Producto");
    printf("\n2.Modificar Producto");
    printf("\n3.Borrar Producto");
    printf("\n4.Ver Producto");
    printf("\n\nOpcion: ");

}


void nuevoProducto(char nombreArchivo[]){

    FILE *pf;

    if((pf=fopen(nombreArchivo, "ab"))==NULL){
        printf("\nError al abrir el archivo");
        exit (-1);
    }

    producto p;

    system("cls");

    printf("Numero: ");
    fflush(stdin);
    scanf("%d", &p.numSerie);
    printf("\nNombre: ");
    fflush(stdin);
    gets(p.nombre);
    printf("\nDescripcion: ");
    fflush(stdin);
    gets(p.descripcion);
    printf("\nPrecio: ");
    fflush(stdin);
    scanf("%d", &p.precio);

    fwrite(&p, sizeof(p), 1, pf);

    fclose(pf);

}


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: guardar estructuras en ficheros
« Respuesta #1 en: 22 Abril 2014, 09:34 am »

A mí si me funciona.

Por cierto, fflush está pensado para buffers de salida, no de entrada... cuidado con eso.

Echa un vistazo al hilo que trata sobre el tema: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html


En línea

pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: guardar estructuras en ficheros
« Respuesta #2 en: 22 Abril 2014, 23:54 pm »

A mí si me funciona.

Por cierto, fflush está pensado para buffers de salida, no de entrada... cuidado con eso.

Echa un vistazo al hilo que trata sobre el tema: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

como que te funciona? yo compilo, creo un archivo, abro el archivo creado y me sale todo raro, con codigos null y no se que
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: guardar estructuras en ficheros
« Respuesta #3 en: 23 Abril 2014, 02:56 am »

compilo, creo un archivo, abro el archivo creado y me sale todo raro, con codigos null y no se que
Eso sucede porque estas utilizando fwrite para escribir los datos en el archivo y esa funcion copia los bytes que los constituyen tal cual (como estan en memoria).

Si quieres que se almacenen de forma legible en el archivo debes utilizar las funciones fprintf, fputs, fgetc, etc. Ejemplos sobre el uso de ellas los puedes revisar cortesía del motor de búsqueda de los foros.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: guardar estructuras en ficheros
« Respuesta #4 en: 23 Abril 2014, 03:41 am »

Eso sucede porque estas utilizando fwrite para escribir los datos en el archivo y esa funcion copia los bytes que los constituyen tal cual (como estan en memoria).

Si quieres que se almacenen de forma legible en el archivo debes utilizar las funciones fprintf, fputs, fgetc, etc. Ejemplos sobre el uso de ellas los puedes revisar cortesía del motor de búsqueda de los foros.

Un saludo

y asi no me deberia andar?

Código:
#include <stdio.h>

struct moto{

    int precio, km;
    char *marca;
    char *descripcion;

};


int main(){

    FILE *pf;

    pf=fopen("datos.dat", "w+b");

    struct moto moto1;

    struct moto moto2;

    moto1.precio=1500;
    moto1.km=0;
    moto1.marca="Yamaha";
    moto1.descripcion="La moto es muy linda y rapida";

    fwrite(&moto1, sizeof(moto1), 1, pf);

    fread(&moto2, sizeof(moto2), 1, pf);

    printf("%d\n", moto2.precio);
    printf("%d\n", moto2.km);
    puts(moto2.marca);
    puts(moto2.descripcion);


    fclose(pf);

    return 0;
}
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: guardar estructuras en ficheros
« Respuesta #5 en: 23 Abril 2014, 04:19 am »

y asi no me deberia andar?
Habría que saber a que te refieres con "andar".

Si te refieres a almacenar los datos como texto en el archivo eso no sucederá ya que continuas usando la función fwrite.

----

Si te refieres a que el programa correctamente almacene los datos de "moto1" y los lea inmediatamente en "moto2" eso tampoco ya que hay dos errores importantes: los campos "marca" y "descripcion" son punteros y no deberías almacenarlos en el archivo y antes de la lectura debes colocarte al inicio del archivo utilizando la función rewind.

----

Lo mejor por sencillo es utilizar arrays para los campos "marca" y "descripcion". Para imprimir en el archivo utilizas fprintf, mas o menos asi:
Código
  1. struct moto{
  2.   int precio;
  3.   int km;
  4.   char marca[100];
  5.   char descripcion[100];
  6. };
  7.  
  8. /* ... */
  9.  
  10. pf = fopen("datos.dat", "w+");
  11. fprintf(pf, "%d\n%d\n", moto1.precio, moto1.km);
  12. fprintf(pf, "%s\n", moto1.marca);
  13. fprintf(pf, "%s\n", moto1.descripcion);

Y para leerlos como texto:
Código
  1. rewind(pf);
  2. fscanf(pf, "%d %d%*c", &moto2.precio, &moto2.km);
  3. fgets(moto2.marca, 100, pf);
  4. fgets(moto2.descripcion, 100, pf);

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: guardar estructuras en ficheros
« Respuesta #6 en: 23 Abril 2014, 19:24 pm »

ok, muchas gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Editar y guardar ficheros [Solucionado]
PHP
i-Charlie 7 5,445 Último mensaje 8 Octubre 2009, 19:45 pm
por дٳŦ٭
Guardar variables en ficheros C
Programación C/C++
nyper01 5 3,244 Último mensaje 16 Diciembre 2013, 20:45 pm
por xiruko
Ficheros y estructuras
Programación C/C++
Cas980 3 2,239 Último mensaje 19 Abril 2014, 19:46 pm
por d91
estructuras en ficheros
Programación C/C++
pedroedlp 4 2,054 Último mensaje 23 Abril 2014, 10:09 am
por amchacon
Como guardar un índice de ficheros
.NET (C#, VB.NET, ASP)
Bob_Ale 3 2,872 Último mensaje 14 Octubre 2015, 08:31 am
por Bob_Ale
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines