Me parece bien que estudies acerca de estructuras ya que te facilita varias cosas.
Mire otra ves el codigo y me equivoque en pasarte esto:
fseek(stock
,pos
-1,SEEK_SET
);
tenia que ser:
fseek(stock
,pos
-sizeof(int),SEEK_SET
);
Hay q descontar sizeof(int) a pos ya que despues de leer el codigo del archivo, el cursor
se desplaza 4bytes(o 2bytes)
Compile el programa y me anda bien, te dejo las modificaciones:
En el modulo de stock
case 2:
if(op == 2)
{
printf("\n____________________________"); printf("\nBienvenidoal modulo de stock: "); printf("\nEscoja la opcion: "); printf("\n1 - Alta de un articulo"); printf("\n2 - Consulta de un articulo "); printf("\n3 - Descontar stock"); printf("\n___________________________\n"); switch(st)
{
case 0:
return 0;
break;
case 1:
if(st == 1)
ALTAS_ARTICULOS(stock);
break;
case 2:
if(st == 2)
CONSULTA_ARTICULOS(stock);
break;
case 3:
printf("\nIngrese codigo del articulo: "); printf("\nIngrese la cantidad a descontar: "); DESCONTAR_STOCK(stock, cantidad, cod);
break;
default:
printf("\nLa opcion no es correcta "); break;
}
break;
}
Funcion modificada:
void DESCONTAR_STOCK(FILE *stock1, int diferencia, int x)
{
int cod,cantidad,ns;//nc: nueva cantidad del articulo
float precio;
int pos;
char art[50];
stock1
= fopen("Stock.dat","r+b"); fread(&cod
,sizeof(int),1,stock1
); fread(art
,sizeof(art
),1,stock1
); fread(&cantidad
,sizeof(int),1,stock1
); fread(&precio
,sizeof(float),1,stock1
); {
if(x == cod)
{
ns = cantidad - diferencia;
fseek(stock1
,pos
-sizeof(int),SEEK_SET
); fwrite(&cod
,sizeof(int),1,stock1
); fwrite(art
,sizeof(art
),1,stock1
); fwrite(&ns
,sizeof(int),1,stock1
); fwrite(&precio
,sizeof(float),1,stock1
); fseek(stock1
,0,SEEK_END
); }
fread(&cod
,sizeof(int),1,stock1
); fread(art
,sizeof(art
),1,stock1
); fread(&cantidad
,sizeof(int),1,stock1
); fread(&precio
,sizeof(float),1,stock1
); }
}
Saludos