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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda - Archivo binario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda - Archivo binario  (Leído 2,616 veces)
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Ayuda - Archivo binario
« en: 25 Enero 2019, 13:04 pm »

Buenas, hice un ejercicio donde tenía que cargar en un archivo binario pares de datos donde uno era float y el otro int.
El problema es, que cuando hice otro programa para cargar un vector con esos datos guardados en ese archivo, no me muestra nada.
Aquí les dejo el código, sinceramente, no veo dónde está el problema, porque ni siquiera en la compilación me da error.

Código
  1. Pares{ float a, int b}
  2.  
  3. main(){
  4. Pares aux; vector<Pares> P;
  5. ifstream entrada;
  6. entrada.open(/*nom_archi*/,ios::binary|ios::ate);
  7. if(!entrada.is_open(){
  8. /*algo...*/
  9. }
  10. int tam_archi=entrada.tellg()/sizeof(Pares);
  11. entrada.seekg(0);
  12. for(int i=0;i=tam_archi;i++){
  13. entrada.read(reinterpret_cast <char*> (&aux),sizeof(aux));
  14. P.push_back(aux);
  15. }
  16. entrada.close();
  17. fori(P.size()){
  18. cout<<P[i].a<<" "<<P[i].b<<endl; /*No muestra nada*/
  19. }
  20.  
Esto es un ejemplo del programa que hice, para que no sea tan largo de leer, al finalizar la compilación no me saltan errores, pero no muestra el vector, como si no tuviese nada, la lectura debería ir bien y cada vez que leo un "Par" debería ponerlo en el vector, pero no es el caso.


En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: Ayuda - Archivo binario
« Respuesta #1 en: 25 Enero 2019, 13:38 pm »

Hay un problema desde la primera línea:
Código:
Pares{ float a, int b}
Pares no tiene definido el tipo.
{float a, int n} no es una expresión C++ válida. Fíjate que están separados por una coma y que int n no termina en ;
También falta el ; al final de la expresión.

Después hay otras cosas, pero deberías tratar primero de que compile.


En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Ayuda - Archivo binario
« Respuesta #2 en: 25 Enero 2019, 21:58 pm »

Será que en la línea 12 asignas 2 veces la variable i?
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Ayuda - Archivo binario
« Respuesta #3 en: 25 Enero 2019, 22:34 pm »

Hay un problema desde la primera línea:
Código:
Pares{ float a, int b}
Pares no tiene definido el tipo.
{float a, int n} no es una expresión C++ válida. Fíjate que están separados por una coma y que int n no termina en ;
También falta el ; al final de la expresión.

Después hay otras cosas, pero deberías tratar primero de que compile.

Es un ejemplo, ya se que falta el tipo de dato (struct) y los otros errores de sintaxis ; puse un "prototipo" de lo que hice, para que me dijeran qué podría estar mal a nivel lógico jaja espero me comprendas, sino, pongo el código exacto de lo que hice.
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Ayuda - Archivo binario
« Respuesta #4 en: 25 Enero 2019, 22:40 pm »

Será que en la línea 12 asignas 2 veces la variable i?
Cómo que la asigno dos veces? en la primera entrada de la estructura iterativa lo declaro y ya más luego pongo desde dónde leer y hasta dónde hacerlo.
Me fije en el programa base que había hecho, tenía un pequeño problema, lo modifique y probé nuevamente (anduvo) pero al hacer éste prototipo, para ver si realmente se guardaron los datos en el archivo, cuando itero el vector de pares, éste se encuentra vacío jaja me ha dejado en las nubes, releí la teoría, pero no he hecho nada incorrecto, a mi parecer jaja
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayuda - Archivo binario
« Respuesta #5 en: 26 Enero 2019, 00:35 am »

Lo que CalgaryCorpus quiere decir con que asignas dos veces la variable <i> es lo siguiente:
Código
  1. for(int i = 0; i = tam_archi; i++){}
Ahí estás inicializando la variable <i> a 0, seguidamente le asignas el valor <tam_archi> y ya se ejecuta el <for>. El segundo campo del <for> es incorrecto.

Es un ejemplo, ya se que falta el tipo de dato (struct) y los otros errores de sintaxis ; puse un "prototipo" de lo que hice, para que me dijeran qué podría estar mal a nivel lógico jaja espero me comprendas, sino, pongo el código exacto de lo que hice.
Te recomiendo para este tipo de errores que copies el código original, ya que el error puede deberse a que haya algo mal implementado y que tú estés pasando por alto. Si es muy largo puedes copiar sólo el bloque más relevante. :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Ayuda - Archivo binario
« Respuesta #6 en: 26 Enero 2019, 01:55 am »

Saludos,

- Y se puede leer así de esa forma tan indiscriminada un fichero binario :xD?, te muestro el siguiente ejemplos sencillo que escribe y lee un Float y un Int  a/desde un fichero binario:

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.  float ofloat = 5.6;
  9.  int   oint   = 10;
  10.  ofstream ofile( "file.bin", ios::out | ios::binary );
  11.  ofile.write( (char *) &ofloat, sizeof(float) );
  12.  ofile.write( (char *) &oint, sizeof(int) );
  13.  ofile.close();
  14.  
  15.  
  16.  float ifloat = 0;
  17.  int   iint   = 0;
  18.  ifstream ifile( "file.bin", ios::in );
  19.  ifile.read( (char *) &ifloat, sizeof(float) );
  20.  ifile.read( (char *) &iint, sizeof(int) );
  21.  cout << ifloat << endl;
  22.  cout << iint << endl;
  23.  ifile.close();
  24.  return 0;
  25. }
En línea

Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Ayuda - Archivo binario
« Respuesta #7 en: 28 Enero 2019, 00:15 am »

Lo que CalgaryCorpus quiere decir con que asignas dos veces la variable <i> es lo siguiente:
Código
  1. for(int i = 0; i = tam_archi; i++){}
Ahí estás inicializando la variable <i> a 0, seguidamente le asignas el valor <tam_archi> y ya se ejecuta el <for>. El segundo campo del <for> es incorrecto.

Te recomiendo para este tipo de errores que copies el código original, ya que el error puede deberse a que haya algo mal implementado y que tú estés pasando por alto. Si es muy largo puedes copiar sólo el bloque más relevante. :-X

Jaja que error "boludo" no lo veía! Gracias por remarcarlo  ;D
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Ayuda - Archivo binario
« Respuesta #8 en: 28 Enero 2019, 00:16 am »

Saludos,

- Y se puede leer así de esa forma tan indiscriminada un fichero binario :xD?, te muestro el siguiente ejemplos sencillo que escribe y lee un Float y un Int  a/desde un fichero binario:

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.  float ofloat = 5.6;
  9.  int   oint   = 10;
  10.  ofstream ofile( "file.bin", ios::out | ios::binary );
  11.  ofile.write( (char *) &ofloat, sizeof(float) );
  12.  ofile.write( (char *) &oint, sizeof(int) );
  13.  ofile.close();
  14.  
  15.  
  16.  float ifloat = 0;
  17.  int   iint   = 0;
  18.  ifstream ifile( "file.bin", ios::in );
  19.  ifile.read( (char *) &ifloat, sizeof(float) );
  20.  ifile.read( (char *) &iint, sizeof(int) );
  21.  cout << ifloat << endl;
  22.  cout << iint << endl;
  23.  ifile.close();
  24.  return 0;
  25. }
Mi nivel no es tan alto como para escribir un fichero como lo haces vos! jaja La próxima copio el código del compilador!
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines