Ecco a te un esempio funzionante
#include <stdio.h>
struct newtype
{
int id;
int pagato;
};
int main()
{
struct newtype vet;
FILE *fp = NULL;
int id = -1;
int i = 0;
struct newtype strutture[10];
if((fp = fopen("magazzino.dat","r")) != NULL)
fclose(fp);
//inserimento a caso di strutture con campo non pagato
else
{
for(i = 0; i < 10; i++)
{
strutture[i].pagato = 2;
}
fp = fopen("magazzino.dat","wb+");
if(fp != NULL)
{
for(i = 0; i < 10; i++)
{
strutture[i].id = i;
fwrite(&strutture[i],sizeof(struct newtype),1,fp);
}
fclose(fp);
}
}
// fine inserimento da usare una sola volta solo per creare il file
printf("inserisci un id: ");
scanf("%d", &id);
fp=fopen("magazzino.dat","rb+");
if(fp != NULL)
{
while((fread(&vet,sizeof(struct newtype),1,fp))>0)
{
if(id == vet.id)
{
if(vet.pagato==1)
{
printf("Prodotto gia' pagato!!");
break;
}
else
{
vet.pagato=1;
fseek(fp, ftell(fp)- sizeof(struct newtype), SEEK_SET);
fwrite(&vet,sizeof(struct newtype),1,fp);
break;
}
}
}
fclose(fp);
}
return 0;
}
Quindi il problema sta nel tuo codice.