El programa no sobreescribe el bloque del archivo binario. He intentado varias soluciones como usar el fseek, redwind, cerrar el archivo y volverlo a abrir con modo de escritura(Borraba el contenido anterior del archivo por lo cual no me sirve). También he investigado y preguntado sobre la causa del error, pero tampoco he obtenido una solución. La verdad no encuentro la causa del error. A su vez que se muestra dos veces el contenido de un mismo bloque ¿Alguien me podría ayudar? ¡Se lo agradecería bastante! :D
FILE *arch;
struct productos
{
int codigo;
char descripcion[60];
float precio;
}tproducto;
void altas()
{
arch = fopen("productos.dat","ab");
if(arch == NULL)
exit(1);
printf("Ingrese el codigo del producto:");
scanf("%i",&tproducto.codigo);
fflush(stdin);
printf("Ingrese el nombre del producto:");
fflush(stdin);
gets(tproducto.descripcion);
printf("Ingrese precio:");
scanf("%f", &tproducto.precio);
fwrite(&tproducto, sizeof(tproducto), 1, arch);
fclose(arch);
}
void reporte()
{
arch=fopen("productos.dat","rb");
if(arch==NULL)
exit(1);
while(!feof(arch))
{
fread(&tproducto, sizeof(tproducto), 1, arch);
printf("El codigo del producto es: %i\n", tproducto.codigo);
printf("El nombre del producto es: %s\n", tproducto.descripcion);
printf("El precio del producto es: %f\n", tproducto.precio);
}
fclose(arch);
}
void consulta()
{
int existe=0, consulta;
arch=fopen("productos.dat","rb");
if (arch==NULL)
exit(1);
printf("Ingrese el codigo de producto a consultar:");
scanf("%i", &consulta);
while(!feof(arch))
{
fread(&tproducto, sizeof(tproducto), 1, arch);
if(consulta==tproducto.codigo)
{
printf("El codigo del producto es: %i\n", tproducto.codigo);
printf("La descripcion es: %s\n",tproducto.descripcion);
printf("El precio es de: %0.2f\n" , tproducto.precio);
existe++;
break;
}
}
if(existe==0)
{
printf("No existe un producto con dicho codigo\n");
fclose(arch);
}
}
void modificar()
{
int existe=0, modificar;
arch=fopen("productos.dat","r+b");
if (arch==NULL)
exit(1);
printf("Ingrese el codigo de producto a consultar:");
scanf("%i", &modificar);
while(!feof(arch))
{
fread(&tproducto, sizeof(tproducto), 1, arch);
if(modificar==tproducto.codigo) {
printf("Ingrese el codigo del producto:");
scanf("%i", &tproducto.codigo);
fflush(stdin);
printf("Ingrese el nombre del producto:");
fflush(stdin);
gets(tproducto.descripcion);
printf("Ingrese precio:");
scanf("%f", &tproducto.precio);
fwrite(&tproducto, sizeof(tproducto), 1, arch);
existe++;
break;
}
}
if(existe==0)
{
printf("No existe un producto con dicho codigo\n");
}
fclose(arch);
}