C/Visual C - Almacenar datos de varios tipos de un txt

 
Vista:

Almacenar datos de varios tipos de un txt

Publicado por Peter (4 intervenciones) el 17/06/2010 15:20:38
Hola! Estoy haciendo un pograma que crea una base de datos en un .txt,
El problema que tengo es que el campo de la edad no me lo guarda bien en el .txt. Me aparece un cuadrado en mi archivo txt donde me debería de aparecer la edad, por otro lado este carácter que es un cuadrado no puedo pegarlo en esta nota del foro para que lo veaís. ¿A qué se debe eso?

Lo que quiero es almacenar algunos datos no como tipo char sino como otros tipos como float e int, pero no sé como hacer esto en un txt.
Podría almacenar los datos como caracteres y luego hacer una conversión de datos, pero creo que hay un modo para no tener que recurrir a la conversión de datos.
¿Alguien sabe como hacerlo sin que haya que recurrir a convertir los datos de un tipo a otro?

A continuación os pasó el código del programa.
Gracias por vuestra ayuda.

#include <stdio.h>

struct {
char nombre[20];
char apellido[20];
char telefono[15];
int edad;
} registro;

int main()
{
FILE *fichero;

fichero = fopen( "datos.txt", "a" );
do {
printf( "Nombre: " ); fflush(stdout);
gets(registro.nombre);
if (strcmp(registro.nombre,""))
{
printf( "Apellido: " ); fflush(stdout);
gets(registro.apellido);
printf( "Teléfono: " ); fflush(stdout);
gets(registro.telefono);
printf( "edad: " ); fflush(stdout);
scanf("%d", ®istro.edad);
getchar();
fwrite( ®istro, sizeof(registro), 1, fichero );
}
} while (strcmp(registro.nombre,"")!=0);
fclose( fichero );
}

Gracias por vuestra valiosa ayuda.

Peter.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Almacenar datos de varios tipos de un txt

Publicado por Capitan Kirk (97 intervenciones) el 23/06/2010 13:43:49
El fichero lo estás abriendo como fichero de texto en modo append (añadir al final), pero luego los datos los estás escribiendo en modo binario. Por eso, si lo abres con un editor de texto, verás cosas raras en el campo edad. Los campos nombre, apellido y teléfono te aparecerán correctamente, dado que son arrays de caracteres y su representación interna se corresponde con su representación en texto. No ocurre así con el campo edad: Es un número entero, y su representación interna es distinta a su representación en texto. Si quieres que todo te aparezca como texto, en lugar de escribir los datos con fwrite, hazlo con fprintf (es igual que printf, pero dirigido a fichero, mira en las ayudas de tu compilador o en cualquier libro de C). Eso sí, tendrás que escribir los campos del registro de uno en uno.

Espero que te sirva de ayuda. Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar