Como hago para imprimir un struct en archivo .txt?

Iniciado por alesspale, 17 Agosto 2016, 02:58 AM

0 Miembros y 2 Visitantes están viendo este tema.

alesspale

Buenas estoy haciendo un pequeño proyecto en  C y quiero imprimir el siguiente struc en un archivo

typedef struct clientes{
   char nombres[50], Correo[50];
   long cedula;
   char telefono[12];
   int edad,millasrecorridas, pesoEQ;
   }


cnt;



El problema es que no quiero usar fprintf, ni fputs para imprimirlo porque me ocupa demasiado código y lo veo poco eficiente . Use fwrite pero me daba muchos problemas y casi siempre  imprime basura

Alguien conoce una manera o alguna función parecida al fwrite pero sin ese inconveniente ?

class_OpenGL

Yo creo que no se "imprime" basura. Yo creo que lo que tu ves como basura es el valor binario de los enteros, por lo que yo te aconsejo que sigas usando fwrite:

fwrite(&cnt, sizeof(clientes), 1, archivo);

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

alesspale


class_OpenGL

Estás seguro de que has inicializado la estructura andes de guardarla? También ten en cuenta que la cadena tiene longitud 50, por lo que si por ejemplo la cadena es "Carlos", entonces el resto de bytes de la cadena contendrá basura. Te pongo un ejemplo con una cadena de 10 elementos. Supongamos la siguiente cadena:

char cadena[10] = "Cadena";

Dada la información, el arreglo cadena contiene 'C', 'a', 'd', 'e', 'n', 'a', '\0', pero, ¿qué pasa con el resto de bytes de la cadena? Pues simplemente están llenos de basura, pero eso no pasa nada, para eso está el indicador de final de cadena ('\0'). La cadena se vería así:

'C', 'a', 'd', 'e', 'n', 'a', '\0', BASURA, BASURA, BASURA

donde basura vale cualquier valor "aleatorio"

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

alesspale

Ese es otro problema que tengo con el fwrite que no te imprime hasta el '\0' si no que toda la cadena.
Como haría para eso? por que el struct tiene que llenarlo el usuario

class_OpenGL

Creo que no me has entendido, una vez pasado el caracter nulo, da igual lo que haya guardado en la cadena, pues siempre leerás desde el principio de la cadena hasta el carácter nulo, así que si se guarda 'basura', no pasa nada. Si de verdad te molesta esa basura, simplemente inicializa el arreglo con caracteres nulos, y ya después almacenas la cadena en si.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

AlbertoBSD

Citarimprime basura

Tambien puede ser problema que el archivo se abra en formato binario o no....

Y si muchos usuarios no saben que con fwrite se imprime el bloque completo de memoria que ocupa una estrucutura tenga o no basura o  este o no este correctamente llenado.

Los numero se guardan en formato binario por lo cual no se veran como "1234" sino como un  monto de bytes sin sentido (Caracteres no imprimibles en la mayoria de los casos)

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW