Adesso se voglio inserire un nuovo studente riesco a farlo.
Ho scritto nel frattempo la parte per visualizzare i dati presenti nel'elenco.
Ecco il codice per effettuare quest'opzione:
codice:
  int visualizza (struct pagelle elenco_pagelle[], int n) {
  int scelta;
      FILE*fp=fopen(FILE_PRED,"r");
      if(fp==NULL) {
           printf("-----Errore di lettura. Il file non esiste-----\n");
           return (scelta);
           }
      else {
           printf("Ecco gli studenti presenti in elenco:\n\n");
           printf("%s %s %s %u %u %u %u",elenco_pagelle[n].nome,elenco_pagelle[n].cognome,elenco_pagelle[n].classe,elenco_pagelle[n].italiano,elenco_pagelle[n].matematica,elenco_pagelle[n].informatica,elenco_pagelle[n].religione);
           return 0;
           }
      fclose(fp);
  }
Qui il problema è che se il file non esiste tutto ok, mi dice che non esiste e torna al menù principale, se invece esiste, non mi legge niente, ma mi stampa a schermo solo una serie di numeri. Invece se inserisco alcuni nomi e poi voglio visualizzare la lista (senza uscire e riaprire il programma) mi compare il nome, il cognome, la classe, e poi una serie di numeri al posto dei voti.
Può essere che devo mettere "d" al posto di "u"? Ma così facendo i voti non saranno più come unsigned int ma semplicemente int, sbaglio?

Se serve il codice completo lo posto dopo.