SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: esteruki en Miércoles 28 de Marzo de 2007, 17:42

Título: Sos-parece Sencillo Pero Me Esta Volviendo Loca
Publicado por: esteruki en Miércoles 28 de Marzo de 2007, 17:42
Hola a todos os pongo en antecedentes, Tengo Visual Studio C++ 6.0

Yo me creo un proyecto de consola Win32 Console Aplication

Hago el siguiente Codigo:


Código: Text
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3.  
  4.  struct reg {
  5.   int id;
  6.          char nombre[10];
  7.          char apellido[10];
  8.          char telefono[10];
  9.  }&#59;
  10.  
  11.  int main()
  12.      {
  13.      FILE *fichero;
  14.      struct reg  registro={1,"Pepa","Flores", "915247854"};
  15.      fichero = fopen( "nombres.txt", "wb" );
  16.    
  17. fwrite(&registro,sizeof(reg), 1, fichero);
  18.  
  19.       fread(&registro, sizeof(reg), 1, fichero );
  20.      
  21.       printf( "Id: %d\n",&registro.nombre);
  22.       printf( "Nombre: %s\n", &registro.nombre );
  23.       printf( "Apellido: %s\n", &registro.apellido);
  24.       printf( "Teléfono: %s\n", &registro.telefono);
  25.                
  26.        
  27.      fclose( fichero );
  28.      return 0;
  29.      }
  30.  
  31.  


Pues este codigo tal cual nos escribe en el fichero la direccion de memoria en vez de los datos que le pasamos y tampoco nos lee y nos devuelve los datos,

Tras probar 15 mil cosas no lo hemos logrado

Por Favor ayudarme¡¡¡¡¡ Que me despiden
Título: Re: Sos-parece Sencillo Pero Me Esta Volviendo Loca
Publicado por: JuanK en Miércoles 28 de Marzo de 2007, 17:53
en el archivo no se puede leer, solo escribir porque lo estas abriendo en modo 'wb' o sea escritura binario:

Código: Text
  1. fichero = fopen( "nombres.txt", "wb" );
  2.  

Si estas usando lenguaje C, esto esta mal:

Código: Text
  1. sizeof(reg)
  2.  

porque el tipo no es reg es struct reg:

Código: Text
  1. sizeof(struct reg)
  2.  

Adicionalmente si lo guardas asi:

Código: Text
  1. fwrite(&registro,sizeof(reg), 1, fichero);
  2.  

estas guardando
 1 entero y 4 char * lo cual no implica guardar el contenido de la cadena, solo el apuntador de la cadena.

por otro lado:

Código: Text
  1. fwrite(&registro,sizeof(reg), 1, fichero);
  2.  
  3. fread(&registro, sizeof(reg), 1, fichero );
  4.  

también esta mal por que una vez escribes el apuntador del archivo se mueve asi que para volver a leer lo que acabas de escribir debes reposicionar el archivo donde comenzaste a escribir... eso lo haces utilizando la función fseek.
Título: Re: Sos-parece Sencillo Pero Me Esta Volviendo Loca
Publicado por: Eternal Idol en Miércoles 28 de Marzo de 2007, 17:54
Cita de: "esteruki"
Tras probar 15 mil cosas no lo hemos logrado

Por Favor ayudarme¡¡¡¡¡ Que me despiden
Si esas dos afirmaciones son ciertas, que lo dudo muchisimo, te lo mereces.
Título: Re: Sos-parece Sencillo Pero Me Esta Volviendo Loca
Publicado por: JuanK en Miércoles 28 de Marzo de 2007, 17:55
si,
una vez mas:

http://www.conclase.net/c/ (http://www.conclase.net/c/)
Título: Re: Sos-parece Sencillo Pero Me Esta Volviendo Loca
Publicado por: Bicholey en Miércoles 28 de Marzo de 2007, 18:32
Cita de: "Eternal Idol"
Cita de: "esteruki"
Tras probar 15 mil cosas no lo hemos logrado

Por Favor ayudarme¡¡¡¡¡ Que me despiden
Si esas dos afirmaciones son ciertas, que lo dudo muchisimo, te lo mereces.
 :lol:  :lol:  :lol:


Como dicen en mi trabajo, yo quiero soluciones no problemas, y los problemas los resuelvez tù...