ragazzi non riesco a capire perchè questo programma cosi semplice non va
qualcuno riesce ad aiutarmi?
#include <iostream>
#include <conio.h>
using namespace std;


int main() {
int n=0,anno=0;
struct Data {
int giorno;
int mese;
int anno;
};
typedef struct Data DATA;
DATA data;

FILE* fpunt;
fpunt = fopen("prova.dat","w");

//scrivo
for(n=0;n<4;n++) {
data.giorno=n;
data.mese=n;
data.anno=n;
fwrite (&data,sizeof(DATA),1,fpunt);
}
fclose(fpunt);

//leggo
fpunt = fopen("prova.dat","r");
fread (&data,sizeof(DATA),1,fpunt);
while (!feof(fpunt)) {
cout << data.giorno;
cout << " - ";
cout << data.mese;
cout << " - ";
cout << data.anno;
cout << endl;
fread (&data,sizeof(DATA),1,fpunt);
}
fclose(fpunt);


//prendo un anno da modificare
cout << "inserisci l'anno" << endl;
cin >> anno;
fpunt = fopen("prova.dat","r+");
fread (&data,sizeof(DATA),1,fpunt);
while (!feof(fpunt)) {
if(anno==data.anno) {
cout << "Record da modificare: ";
cout << data.giorno;
cout << " - ";
cout << data.mese;
cout << " - ";
cout << data.anno;
cout << endl;
cout << "Inserisci il giorno" << endl;
cin >> data.giorno;
cout << "Inserisci il mese" << endl;
cin >> data.mese;
cout << "Inserisci l'anno" << endl;
cin >> data.anno;
fseek(fpunt, 0 , SEEK_CUR);
fwrite (&data,sizeof(DATA),1,fpunt);

}
fread (&data,sizeof(DATA),1,fpunt);
}
fclose(fpunt);


getch();
return 0;

}

Inserisco semplicemente 4 struct in un file poi le leggo.
Successivamente chiedo di inserire un ora e voglio modificare il contenuto di quella riga.
Ma dopo avermi chiesto i dati "modificati" va in loop, cioè mi richiede sempre gli stessi dati