codice:
#include <stdio.h> 
#include <stdlib.h> 
typedef struct{ 
int id; 
int numeroprod; 
float spesa; }Id; 
int main(){ 
int i,ide; 
Id transazione={0,0,0}; 
FILE *fptr; fptr=fopen("./transazioni.dat","wb"); 
if(fptr==NULL){ printf("errore\n"); } 
else { 
for(i=0;i<100;i++)
{
fwrite(&transazione,sizeof(Id),1,fptr); } 
fclose(fptr); 
}
fptr=fopen("./transazioni.dat","ab+"); 
if(fptr==NULL){ printf("errore\n"); } 
else { 
printf("inserisci id\n(da 1 a 100 ,0 per uscire)\n"); 
scanf("%d",&transazione.id); 
while (transazione.id != 0){ 
printf("inserisci quantità e spesa\n");      //fscanf(stdin,"%d%d%f",&transazione.id,&transazione.numeroprod,&transazione.spesa); fscanf(stdin,"%d%f",&transazione.numeroprod,&transazione.spesa); 
fseek(fptr,(transazione.id -1) * sizeof(Id),SEEK_SET); 
fwrite(&transazione, sizeof(Id),1,fptr); 
printf("inserisci id\n(da 1 a 100 ,0 per uscire)\n"); 
scanf("%d",&transazione.id); } 
fclose(fptr); } 
fptr=fopen("./transazioni.dat","rb"); 
if(fptr==NULL){ printf("errore\n"); } 
else { 
while(!feof(fptr)) 
{ 
fread(&transazione, sizeof(Id),1,fptr); 
if(transazione.id != 0){
printf("inserisci id desiderato\n"); 
scanf("%d",&ide); 
if(transazione.id == ide)
{ 
printf("%d %d %f\n",transazione.id,transazione.numeroprod,transazione.spesa); //printf("%d\n",transazione.id); 
}
 }
 } 
fclose(fptr); 
} 
system("PAUSE"); 
return 0; }
il seguente programma deve acquisire dei record e poi stampare a video i record con l'id richiesto, il programma funziona solo che devo inserire due volte l'id...
ovvero fa due volte la printf scanf di ide;
credo il problema sia nella condizione !feof(fptr) perchè in una versione precedente(uguale senza la richiesta dell id) mi stampava due volte l'ultimo record, solo che ho provato a modificarla con altre varianti fino all'EOF ma sempre con scarsi risultati.