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...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; }
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.