Ciao a tutti. Ho un problema con i file binari e con l'feof (praticamente non si ferma alla fine del file).

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define dmaxS 100
#define dmax 3

typedef struct record{
	char cognome[dmaxS];
	char nome[dmaxS];
	char sesso;
	int anno;
}record;

int main(){
	record elenco[dmax];
	record elenco2[dmax];
	int dim;
	FILE *fp;
	int i;
	for(i=0;i<dmax;i++){
		printf("%d)\n",i);
		printf("Cognome: ");
		gets(elenco[i].cognome);
		printf("Nome: ");
		gets(elenco[i].nome);
		printf("Sesso: ");
		scanf("%c",&(elenco[i].sesso));
		fflush(stdin);
		printf("Anno di nascita: ");
		scanf("%d",&(elenco[i].anno));
		fflush(stdin);
		printf("\n");
	}
	fp = fopen("prova.bin","wb");
	if(fp != NULL){
		for(i=0;i<dmax;i++){
		   fwrite(elenco[i].cognome,sizeof(char),dmaxS,fp);
		   fwrite(elenco[i].nome,sizeof(char),dmaxS,fp);
		   fwrite(&(elenco[i].sesso),sizeof(char),1,fp);
		   fwrite(&(elenco[i].anno),sizeof(int),1,fp);
		}
		fclose(fp);
		fp = fopen("prova.bin","rb");
		if(fp != NULL){
			i=0;
			while(!feof(fp)){ // non si ferma al terzo ciclo
				fread(elenco2[i].cognome,sizeof(char),dmaxS,fp);
				fread(elenco2[i].nome,sizeof(char),dmaxS,fp);
				fread(&(elenco2[i].sesso),sizeof(char),1,fp);
				fread(&(elenco2[i].anno),sizeof(int),1,fp);
				i++;
			}
			dim = i;
			fclose(fp);
			for(i=0;i<dim;i++){
				printf("\n");
				puts(elenco2[i].cognome);
				puts(elenco2[i].nome);
				printf("%c\n",elenco2[i].sesso);
				printf("%d\n",elenco2[i].anno);
			}
		}
	}
	system("pause>nul");
	return 0;
}