Problemas con fwrite

Iniciado por juan228, 5 Mayo 2015, 19:17 PM

0 Miembros y 1 Visitante están viendo este tema.

juan228

Hola! Les comento, lo que tiene que hacer el programa es grabar productos dentro de un archivo y listo. El tema esta en que me graba todo MENOS el cod_art y no entiendo por que!

Les dejo el codigo para que puedan verlo

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define DIR "productos.txt"

typedef struct{int cod_art; float peso; char nombre[15], desc[120];}t_producto;

int main()
{
t_producto producto;
FILE *pf;
char opc;

if((pf=fopen(DIR,"w"))==NULL)
{
printf("\nEl Archivo no puede ser abierto");
exit(1);
}

printf("Ingresar un Articulo nuevo (s/n)?: ");
opc=getche();
while(opc=='s')
{
printf("\nIngresar Codigo del Articulo: ");
fflush(stdin);
scanf("%d", &producto.cod_art);
printf("Ingresar Nombre del Articulo: ");
fflush(stdin);
gets(producto.nombre);
printf("Ingresar Descripcion del Articulo: ");
fflush(stdin);
gets(producto.desc);
printf("Ingresar Peso del Articulo: ");
scanf("%f", &producto.peso);
fwrite(&producto,sizeof(producto),1,pf);
printf("\nIngresar un Articulo nuevo (s/n)?: ");
opc=getche();
}
fclose(pf);
return (1);
}

engel lex

wow! vengo es por lo que no se debe hacer... cumples la lista casi completa

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

arregla eso, no vaya a ser un conflicto con fflush(stdin)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

juan228

Cita de: engel lex en  5 Mayo 2015, 19:21 PM
wow! vengo es por lo que no se debe hacer... cumples la lista casi completa

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

arregla eso, no vaya a ser un conflicto con fflush(stdin)

Primero que nada gracias y buena foto de DW :P jajaj

Con respecto al tema de los fflush, solo los pongo antes del ingreso de cadenas, en caso de sacarlo me saltea todo, es decir me hace esto:

Ingrese Codigo: 0000
Ingrese Nombre:
Ingrese Descripcion: _

Es decir me saltea uno, por eso los pongo...

Tenes alguna idea de por que el unico dato que no me considera es el primero??

engel lex

leiste el link, hiciste los cambios respectivos y no funcionó?

intentaste hacer debug?

primero prueba las soluciones, luego responde con tus resultados...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

juan228

Cita de: engel lex en  5 Mayo 2015, 19:43 PM
leiste el link, hiciste los cambios respectivos y no funcionó?

intentaste hacer debug?

primero prueba las soluciones, luego responde con tus resultados...

Si, te los enumero:


  • gets(); | Si lo saco y uso un scanf no solo que no noto cambios sino que tampoco puedo escribir cadena de caracteres separados por espacios.
  • fflush(stdin); | Si saco los fflush que se encuentran antes de los gets (o scanf segun el caso) me saltea como te dije antes
  • conio.h | Lo uso para el getche(); en el peor de los casos, lo saco y pongo un scan pero eso no falla

A que te referis con debug ?

engel lex

:¬¬ en el tema no es un queja... está la solución para cada caso...

deja conio.h (aunque hay soluciones para ello) cambia los otros 2... teóricamente si cambias el gets, no necesitas fflush
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.