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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al leer un archivo binario en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al leer un archivo binario en C  (Leído 5,465 veces)
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Problema al leer un archivo binario en C
« en: 11 Agosto 2012, 20:49 pm »

Buenas, estupendo foro, no hace mucho plantee una duda sobre un programa que quería hacer, como hace poco me desocuparon del trabajo(para no decir echaron), me dispuse a terminarlo, no sabia nada de estructura pero ahora me defiendo, yo creo un archivo y escribo en él, funciona perfecto, hago una consulta, de nuevo perfecto, pero cuando quiero que me tire datos en masa, osea que imprima por pantalla todos los datos, me salen caracteres raros como si el problema fuera de lectura.

Código
  1. void MOSTRAR_ARTICULOS()
  2. {
  3. FILE *stock;
  4.  
  5. struct articulos
  6. {
  7. int codigo;
  8. char art[50];
  9. int cantidad;
  10. float precio;
  11. }datos;
  12.  
  13. stock = fopen("Stock.in","rb");
  14. fread(&datos,sizeof(datos),1,stock);
  15. printf("\n_______________________________________________________");
  16. printf("\n%-12s%-18s%-10s%-10s","Codigo","Articulo","Cantidad",
  17. "Precio");
  18. while(!feof(stock))
  19. {
  20. printf("\n%-12d%-18s%-10d%10.2f",datos.codigo,datos.art,
  21. datos.cantidad,datos.precio);
  22. fread(&datos,sizeof(datos),1,stock);
  23. }
  24. printf("\n______________________________________________________\n");
  25. fclose(stock);
  26. system("read -p'Presione Enter para Continuar' var");
  27. system("clear");
  28. }
  29.  

Y si yo ingrese 10 productos lo da a los 10 pero con caracteres raros. Ya intente soluciones:
-Cambiar la extensión del archivo, primero era .dat, ahora en .in.
-Lo que vi yo era que la imagen del archivo guardado se asemeja más a una foto que a un archivo binario.     


En línea

Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Problema al leer un archivo binario en C
« Respuesta #1 en: 11 Agosto 2012, 21:20 pm »

Define datos de esta forma y fuera de la función:

Código
  1. typedef struct articulos
  2. {
  3. int codigo;
  4. char art[50];
  5. int cantidad;
  6. float precio;
  7. }datos __attribute__ ((packed));
  8.  

Saludos.


En línea

the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Problema al leer un archivo binario en C
« Respuesta #2 en: 11 Agosto 2012, 22:16 pm »

Si, genial, ahora porque desde afuera funciona bien, y desde la misma función no,es más, hasta se me colorea la sintaxis de la estructura, que groso.

Edito:

Ya logre asignar valores desde una estructura hacia otra, pero no completa, yo tengo una estructura y otra de la misma caracteristica, a la segunda le debo modificar algo, entonces saco los valores y los asigo asi:

Código
  1. subtotal = y * datos.precio;
  2. datos_ventas.codigo_ventas = datos.codigo;
  3. datos_ventas.cantidad_ventas = y;
  4. datos_ventas.articulo_ventas = datos.articulo;
  5. datos_ventas.precio_ventas = datos.precio;
  6. datos_ventas.total = datos_ventas.total + subtotal;
  7. fwrite(&datos_ventas,sizeof(struct ventas),1,ventas_cont);
  8.  
Se escriben bien salvo la cuarta linea, que me dice que no puedo asignar char[50] a otro de tipo char * y no entiendo si articulo_ventas y articulo son de tipo char[50]
« Última modificación: 12 Agosto 2012, 00:13 am por the_jocker » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema al leer un archivo binario en C
« Respuesta #3 en: 12 Agosto 2012, 00:51 am »

En C no puedes utilizar el operador de asignación "=" con arrays, en su lugar debes utilizar la función "strcpy" (prototipo en <string.h>).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
the_jocker

Desconectado Desconectado

Mensajes: 41



Ver Perfil
Re: Problema al leer un archivo binario en C
« Respuesta #4 en: 12 Agosto 2012, 17:42 pm »

Gracias pude resolver mi problema, cunado esté terminado el programa, lo voy compartir para que los que se inicien en C puedan ver que con poco se puede hacer mucho.Gracias.
En línea

CSQCasimiro

Desconectado Desconectado

Mensajes: 20



Ver Perfil
Re: Problema al leer un archivo binario en C
« Respuesta #5 en: 13 Agosto 2012, 01:37 am »

acordarte también, que si vas a sacar todos los datos del archivo de una, tenes que saber la cantidad de registros que contiene y almacenarlo en un vector de la estructura. osea, si yo tengo 5 registros del tipo de estructura "fulano" , al sacarlos de una debería hacer el sizeof de fulano y al siguiente parámetro ponerle 5 en vez de 1, y lo otro que te quería agregar, es que vos al archivo le podes poner la extensión que se te cante, ya sea .dat o .fulanoestuboaquiescribiendoextenciones
En línea

"Mejora el Algoritmo, no el Código"
"Buscando todos los días ser mejor que ayer"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
leer archivo BINARIO « 1 2 3 4 »
Programación Visual Basic
WestOn 37 21,928 Último mensaje 3 Octubre 2008, 18:22 pm
por WestOn
Problema Al leer Archivo En C
Programación C/C++
ZedGe 3 6,399 Último mensaje 22 Enero 2012, 11:27 am
por Xandrete
Problema al leer archivo en Java
Java
thekill01 1 2,674 Último mensaje 27 Mayo 2012, 03:02 am
por [Case]
Tengo un problema (convertidor a binario)
Java
DarkSorcerer 2 2,976 Último mensaje 2 Septiembre 2012, 03:08 am
por DarkSorcerer
Problema modificación archivo binario java
Programación General
solid120 0 3,652 Último mensaje 3 Junio 2013, 11:28 am
por solid120
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines