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