ciao ragazzi, devo fare un "esercizio" che generato N di dati anagrafici li devo salvare in un file binario e successivamente devo leggere il contenuto del file e stamparlo a video... ho provato ma non riesco

codice:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>


#define N 5


typedef struct {
	int giorno;
	int mese;
	int anno;
} data ;


typedef struct {
	int giorno;
	int mese;
	int anno;
} data1 ;




typedef struct {
	int id;
	char nome_utente[50];
	char nome[50+1]; // account NOME
	char cognome[50+1]; // account first name
	int sesso;
    data datanascita;
    data1  data_iscrizione;
	char password[10+1];
	char email[60+1];
}utente;
typedef enum {false, true} bool;


// prototypes
		void insert(FILE *pf); //prototipo funzione
		void print(FILE *pf); //prototipo funzione




int main(void)
{
	setbuf(stdout,NULL);
	setbuf(stdout,NULL);
 utente account;


   FILE *cfPtr; // studenti.dat file pointer


   // fopen opens the file; exits if file cannot be opened
   if ((cfPtr = fopen("studenti.dat", "rb")) == NULL) {
      puts("File could not be opened.");
   }
   else {


      unsigned int choice; // user's choice


      // enable user to specify action
      char strScelta[2];
      	char sceltaSicurezza[2];
      	int scelta = 0;
      	int sottosceltaint = 0;




      	bool esci = false;	//true se l'utente sceglie opzione 0 per uscire dal programma
      	bool valore_trovato = true;
      	bool esci_aggiornamento_voto = false;








      	while(!esci){
      		printf("\n");


      		printf("1) gestione utenti DATI\n");
      		printf("2) ____\n");
      		printf("3)____\n");
      		printf("4) ____\n");
      		printf("5) ____\n");
      		printf("Opzione desiderata: ");
      					scanf("%s", strScelta);
      		while (strcmp(strScelta,"1") && strcmp(strScelta,"2") && strcmp(strScelta,"3") && strcmp(strScelta,"4") && strcmp(strScelta,"5")){
      			printf("Hai effettuato una scelta errata\n ");
      			printf("Effettua una scelta: ");
      			scanf("%s", strScelta);
      			//ripete fin quando l'utente non inserisce una scelta valida
      		}
      		while (strcmp(strScelta,"1") && strcmp(strScelta,"2")){
      		      			printf("Attenzione! hai inserito una scelta non valita\n ");
      		      			printf("Opzione desiderata: ");
      		      			      			scanf("%s", strScelta);
      		      		}


      		//conversione scelta in int
      		scelta = (int) strtol(strScelta,(char **)NULL,0);


      		switch(scelta){


      			case 1:


      					printf("CARICAMENTO DATI\n");


      					printf("1) generazione dati\n");
      					printf("2) visualizzazione dati\n");


      					printf("Effettua una scelta: ");
      					scanf("%s", strScelta);
      		while (strcmp(strScelta,"1") && strcmp(strScelta,"2")){
      			printf("Hai effettuato una scelta errata\n ");
      			      			printf("Effettua una scelta: ");
      			      			scanf("%s", strScelta);
      		}


      					//ripete fin quando l'utente non inserisce una scelta valida


      							if(strcmp(strScelta,"1") == 0){
      								insert(cfPtr);
      								printf("\n");
      							} else if(strcmp(strScelta,"2") == 0){
      								print(cfPtr);
      								printf("\n");
      							}
      							scelta = (int) strtol(strScelta,(char **)NULL,0);
      				break;


      			case 2:


      				break;


      			case 3:


      				break;


      			case 4:


      				break;


      			case 5:
      				printf("\ncaso0\n");
      				      				esci = true;
      				      				break;


      		}
      	}








      fclose(cfPtr); // fclose closes the file
   }
}






void insert(FILE *pfile){
	setvbuf(stdout, NULL, _IONBF, 0);
		FILE *fp;
		int i;
		utente account[N];


		if((fp=fopen("utenti.txt", "wb"))==NULL) {
		printf("Errore nell'apertura del file'");
		exit(1);
		}
		int indice=0;
		int seed = (time(NULL));
		srand(seed);
		// randomizzo nomi, cognomi, indirizzo e email
		char* nomi [] = {"ALESSANDRO", "GIACOMO", "ALESSIO", "ANTONIO", "CARLO", "FABIO",
		"ALESSANDRA", "GIACOMA","ALESSIA", "ANTONIA", "CARLA", "FABIA"};
		char* cognomi [] = {"ROSSI", "BIANCHI", "NEGRO", "RIZZI", "CAMPESE", "IODICE",
		"ROSSIA", "BIANCHIA", "NEGROA", "RIZZIA", "CAMPESEA", "IODICEA"};
		char* simboli [] = {".", "_"};


		char* email[] = {"@gmail.com", "@gmail.it", "@hotmail.it", "@hotmail.it", "@aruba.it", "@aruba.com", "@libero.it"};
		// RANDOM NOMI
		for(i=0;i<N;i++) {
		//determino il codice univovo <-- DA CAMBIARE
		account[i].id = i+1;
		//determino in nome radom
		indice = 0;
		indice = rand () % 12;


		strcpy(account[i].nome, nomi[indice]);
		int indice_sesso= indice+1;


		/*if (indice_sesso > 6){
		account[i].sesso = 0;
		}else
		account[i].sesso = 1;*/
		//determino il cognome random
		indice = 0;
		indice = rand () % 12;
		strcpy(account[i].cognome, cognomi[indice]);
		//determino il sesso delle persone


		// data nascita


		char stringa_mese[2];
		account[i].datanascita.anno = rand()% (40) + 1969;


		// Mese nascita
		account[i].datanascita.mese = rand () % (12 - 1) + 1;
		itoa (account[i].datanascita.mese, stringa_mese, 10);




		// Giorno nascita


		if (account[i].datanascita.mese==2 && account[i].datanascita.anno%400==0 ||  (account[i].datanascita.anno%4==0 &&!(account[i].datanascita.anno%100==0))){
		account[i].datanascita.giorno = rand () % (29 - 01) + 01;
		}
		else if (account[i].datanascita.mese==2){
		account[i].datanascita.giorno = rand () % (28 - 01) + 01;
		}
		else if (account[i].datanascita.mese==1 || account[i].datanascita.mese==3 || account[i].datanascita.mese==5 || account[i].datanascita.mese==7 || account[i].datanascita.mese==8 || account[i].datanascita.mese==10){
		account[i].datanascita.giorno = rand () % (31 - 01) + 01;
		}
		else {
		account[i].datanascita.giorno = rand () % (30 - 01) + 01;
		}
		// generazione nome utente
		char string[50] = {""};
		char string1[4+1] = {""};


		int anno = account[i].datanascita.anno;
		itoa (anno, string1, 10);


		strcpy(string, account[i].nome);	// copio il nome
		indice = 0;
		strcat(string, "_");
		strcat(string, account[i].cognome); // concateno il cognome
		strcat(string, ".");
		strcat(string, string1);


		// data iscrizione


		//	char stringa_mese[2];
		account[i].data_iscrizione.anno = rand()% (15) + 2005;


		// Mese nascita
		account[i].data_iscrizione.mese = rand () % (12 - 1) + 1;
		itoa (account[i].data_iscrizione.mese, stringa_mese, 10);




		// Giorno nascita


		if (account[i].data_iscrizione.mese==2 && account[i].data_iscrizione.anno%400==0 ||  (account[i].data_iscrizione.anno%4==0 &&!(account[i].data_iscrizione.anno%100==0))){
		account[i].data_iscrizione.giorno = rand () % (29 - 01) + 01;
		}
		else if (account[i].data_iscrizione.mese==2){
		account[i].data_iscrizione.giorno = rand () % (28 - 01) + 01;
		}
		else if (account[i].data_iscrizione.mese==1 || account[i].data_iscrizione.mese==3 || account[i].data_iscrizione.mese==5 || account[i].data_iscrizione.mese==7 || account[i].data_iscrizione.mese==8 || account[i].data_iscrizione.mese==10){
		account[i].data_iscrizione.giorno = rand () % (31 - 01) + 01;
		}
		else {
		account[i].data_iscrizione.giorno = rand () % (30 - 01) + 01;
		}














		/*for (int j=0; j<4;j++){


		/*	}*/
		strcpy(account[i].nome_utente, string); // copio string all'interno della stringa 'email'




		//generazione password


		//generazione email


		indice = 0;
		indice  = rand () % 10;
		strcat(account[i].email, account[i].nome);
		strcat(account[i].email, account[i].cognome);
		strcat(account[i].email, email[indice]);


		fflush(stdin);




		}
		fprintf(fp, "%-6s%-15s%-15s%-20s%-32s\n","#","NOME","COGNOME","DATA DI NASCITA","NOME UTENTE");
		for (i=0;i<N;i++){
		fprintf(fp,"%4d) %-15s%-15s\n",account[i].id, account[i].nome, account[i].cognome);
		//	fprintf(fp,"%-15s", account[i].nome);
		//fprintf(fp, "%-15s", account[i].cognome);
		//fprintf(fp,"%-6s%s \t %s\n", account[i].id, account[i].nome, account[i].cognome);
		}
		printf("%-6s%-15s%-15s%-20s%-32s\n","#","NOME","COGNOME","DATA DI NASCITA","NOME UTENTE");
		for(i=0;i<N;i++) {


		// stampo a video i risultati del caricamento in forma tabellare
		if (account[i].id <= 9){
		printf("000%d) ",account[i].id);


		} else if (account[i].id <= 99){
		printf("00%d) " ,account[i].id);
		} else if (account[i].id <= 999){
		printf("0%d) " ,account[i].id);
		}else if (account[i].id <= 9999){
		printf("%d) " ,account[i].id);
		}
		//	printf("%5d) ",account[i].id);
		printf("%-15s", account[i].nome);
		printf("%-15s", account[i].cognome);
		//	printf("%15d", stringa1);
		//	printf("\t\t| #: %d\n", account[i].id);
		//	printf("\t\t| Nome: %s\n", account[i].nome);
		//	printf("\t\t| Cognome: %s\n", account[i].cognome);


		// per una migliore formattazione se il giorno o il mese contengono un num < 10 aggiungo lo 0
		//data nascita
		if (account[i].datanascita.giorno < 10) {
		printf("0%d-", account[i].datanascita.giorno);
		} else {
		printf("%d-", account[i].datanascita.giorno);
		}
		if (account[i].datanascita.mese < 10) {
		printf("0%d-", account[i].datanascita.mese);
		} else {
		printf("%d-", account[i].datanascita.mese);
		}
		printf("%d%-10s", account[i].datanascita.anno,"");
		//data iscrizione


		if (account[i].data_iscrizione.giorno < 10) {
		printf("0%d-", account[i].data_iscrizione.giorno);
		} else {
		printf("%d-", account[i].data_iscrizione.giorno);
		}
		if (account[i].data_iscrizione.mese < 10) {
		printf("0%d-", account[i].data_iscrizione.mese);
		} else {
		printf("%d-", account[i].data_iscrizione.mese);
		}
		printf("%d%-10s", account[i].data_iscrizione.anno,"");
		printf("%-18s", account[i].nome_utente);






		//printf("%-18s", account[i].nome_utente);


		//		printf("%-30s", account[i].email);
		//	printf("%-20s", tolower([i].nome_utente);
		//printf("%-18s", account[i].nome_utente);
		//	printf("\t\t| NOME UTENTE: %s\n", account[i].email);
		//	printf("\t\t| PASSWORD: %s\n", account[i].password);
		//	printf("\t\t| SESSO: %d\n", account[i].sesso);


		printf("\n");


		}
}


void print(FILE *pfile){
	if ((pfile = fopen("studenti.dat", "rb")) == NULL) {
				      puts("File could not be opened.");
				   }
				   else {
					   while (!feof(pfile)) {
					   			         // create studente with default information
						   utente account[N];


						   int result = fread(&account, sizeof(utente), 1, pfile);
						   printf("result: %d\n", result);
					   			         // display record


					   			        	for(int i=0;i<N;i++) {
					   			        			printf("\nMatricola: %d\n",account[i].id);




					   								   			         }


				   }


	printf("%-6s%-15s%-15s%-20s%-32s\n","#","NOME","COGNOME","DATA DI NASCITA","NOME UTENTE");




}
}