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()??
typedef struct
{
char nombre[MAX];
int edad;
char ciudad_residencia[MAX];
}Persona;
el problema que tengo es con el campo int me imprime basura a la hora de escribir en el archivo:
int main()
{
FILE *fd;
Persona p;
agregarDatos(&p);
if((fd = fopen("F:\\gente.txt","w"))!=NULL)
{
fwrite(p.nombre,sizeof(char),strlen(p.nombre),fd);
fwrite(&p.edad,sizeof(int),1,fd);// aqui esta el error
fwrite(p.ciudad_residencia,sizeof(char),strlen(p.ciudad_residencia),fd);
}
else
printf("No se pudo crear archivo\n");
return 0;
}
tengo entendido que con el fprintf me puedo quitar de problemas, pero tengo que usar a fuerzas el fwrite
de antemano gracias
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.
Cita de: m@o_614 en 4 Noviembre 2013, 02:14 AMsi 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:
fwrite(&p, sizeof p, 1, fd);
Cita de: m@o_614 en 4 Noviembre 2013, 02:14 AMel 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
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 35
#define TAM 50
/*
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".
*/
typedef struct
{
char nombre[MAX];
int edad;
char ciudad_residencia[MAX];
}Persona;
void agregarDatos(Persona *p);
int main()
{
FILE *fd,*ap;
Persona p,persona;
agregarDatos(&p);
if((fd = fopen("F:\\gente.dat","w"))!=NULL)
{
fwrite(&p,sizeof(p),1,fd);
fclose(fd);
if((ap = fopen("F:\\gente.dat","r"))!=NULL)
{
fread(&persona,sizeof(p),1,ap);
printf("%s",persona.nombre);
printf("%d",persona.edad);
printf("%s",persona.ciudad_residencia);
}
}
else
printf("No se pudo crear archivo\n");
return 0;
}
void agregarDatos(Persona *p)
{
char buffer[MAX];
printf("Dame nombre: ");
fgets(p->nombre,MAX,stdin);
printf("Dame edad: ");
fgets(buffer,MAX,stdin);
sscanf(buffer,"%d",&p->edad);
printf("Dame ciudad de residencia: ");
fgets(p->ciudad_residencia,MAX,stdin);
}
gracias
Cita de: m@o_614 en 5 Noviembre 2013, 03:11 AMpero 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