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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
fwrite y estructuras
« en: 4 Noviembre 2013, 02:14 am »

Saludos

si tengo la siguiente estructura en la que tengo campos de tipo cadena y campos de tipo entero, cual es la manera para poder escribirlos en un archivo utilizando a fuerzas la funcion fwrite()??

Código
  1. typedef struct
  2. {
  3.    char nombre[MAX];
  4.    int edad;
  5.    char ciudad_residencia[MAX];
  6. }Persona;
  7.  

el problema que tengo es con el campo int me imprime basura  a la hora de escribir en el archivo:

Código
  1. int main()
  2. {
  3.    FILE *fd;
  4.    Persona p;
  5.    agregarDatos(&p);
  6.    if((fd = fopen("F:\\gente.txt","w"))!=NULL)
  7.    {
  8.        fwrite(p.nombre,sizeof(char),strlen(p.nombre),fd);
  9.        fwrite(&p.edad,sizeof(int),1,fd);// aqui esta el error
  10.        fwrite(p.ciudad_residencia,sizeof(char),strlen(p.ciudad_residencia),fd);
  11.    }
  12.    else
  13.       printf("No se pudo crear archivo\n");
  14.    return 0;
  15. }

tengo entendido que con el fprintf me puedo quitar de problemas, pero tengo que usar a fuerzas el fwrite

de antemano gracias



En línea

walrus10

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: fwrite y estructuras
« Respuesta #1 en: 4 Noviembre 2013, 03:12 am »

Mira hace mucho que no programo en ese lenguaje pero creo que tenes que hacer un solo fwrite y con sizeof(Persona), porque de lo que se trata es que el struct es de tipo persona y lo que tenes que escribir en el archivo es una serie de personas si no me equivoco.


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: fwrite y estructuras
« Respuesta #2 en: 4 Noviembre 2013, 16:46 pm »

si tengo la siguiente estructura en la que tengo campos de tipo cadena y campos de tipo entero, cual es la manera para poder escribirlos en un archivo utilizando a fuerzas la funcion fwrite()?
Como ya te comentaron debes imprimir utilizando una sola llamada a fwrite:
Código
  1. fwrite(&p, sizeof p, 1, fd);

el problema que tengo es con el campo int me imprime basura  a la hora de escribir en el archivo
Si con ello te refieres a que el contenido del archivo es ilegible eso es normal ya que la función fwrite escribe un bloque de memoria tal cual, si lo que quieres es texto plano debes utilizar fprintf.

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
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: fwrite y estructuras
« Respuesta #3 en: 5 Noviembre 2013, 03:11 am »

gracias por sus respuestas, el programa me dice:

Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia. Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”, usando “fwrite”. Cerrar el fichero, volverlo a abrir para lectura y mostrar los datos que se habían guardado, que se deben leer con “fread”.

ya entendi como usar el fwrite para escribir en el archivo.dat, pero ahora el problema que tengo es con el fread() que me tiene que recibir los datos leidos del stream y almacenarlos en un buffer o una estructura, pero me aparece basura todavia

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 35
  5. #define TAM 50
  6. /*
  7.    Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia.
  8.    Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”, usando “fwrite”.
  9.    Cerrar el fichero, volverlo a abrir para lectura y mostrar los datos que se habían guardado,
  10.    que se deben leer con “fread”.
  11. */
  12.  
  13. typedef struct
  14. {
  15.    char nombre[MAX];
  16.    int edad;
  17.    char ciudad_residencia[MAX];
  18. }Persona;
  19.  
  20. void agregarDatos(Persona *p);
  21.  
  22. int main()
  23. {
  24.    FILE *fd,*ap;
  25.    Persona p,persona;
  26.    agregarDatos(&p);
  27.    if((fd = fopen("F:\\gente.dat","w"))!=NULL)
  28.    {
  29.        fwrite(&p,sizeof(p),1,fd);
  30.        fclose(fd);
  31.        if((ap = fopen("F:\\gente.dat","r"))!=NULL)
  32.        {
  33.            fread(&persona,sizeof(p),1,ap);
  34.            printf("%s",persona.nombre);
  35.            printf("%d",persona.edad);
  36.            printf("%s",persona.ciudad_residencia);
  37.        }
  38.    }
  39.    else
  40.       printf("No se pudo crear archivo\n");
  41.    return 0;
  42. }
  43.  
  44. void agregarDatos(Persona *p)
  45. {
  46.    char buffer[MAX];
  47.    printf("Dame nombre: ");
  48.    fgets(p->nombre,MAX,stdin);
  49.    printf("Dame edad: ");
  50.    fgets(buffer,MAX,stdin);
  51.    sscanf(buffer,"%d",&p->edad);
  52.    printf("Dame ciudad de residencia: ");
  53.    fgets(p->ciudad_residencia,MAX,stdin);
  54. }
  55.  

gracias
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: fwrite y estructuras
« Respuesta #4 en: 6 Noviembre 2013, 02:33 am »

pero ahora el problema que tengo es con el fread() que me tiene que recibir los datos leidos del stream y almacenarlos en un buffer o una estructura, pero me aparece basura todavia
El programa funciona correctamente, ¿A que te refieres con "basura"?

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas con fwrite()
PHP
eLank0 2 2,090 Último mensaje 17 Enero 2007, 01:57 am
por eLank0
Problema Fwrite
Programación C/C++
kristian_5 2 2,698 Último mensaje 12 Junio 2013, 11:08 am
por aguml
Problemas con fwrite
Programación C/C++
juan228 5 2,100 Último mensaje 5 Mayo 2015, 20:16 pm
por engel lex
fwrite Estructuras
Programación C/C++
pozo_23 1 1,723 Último mensaje 4 Enero 2017, 11:34 am
por MAFUS
ayuda con uso de fwrite actualizar fichero en c
Programación C/C++
adriana13 2 1,812 Último mensaje 19 Octubre 2018, 21:36 pm
por adriana13
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines