Ecco il codice del main che ho scritto.
Il problema è che quando ho due studenti della solita città, del primo mi stampa tutti i dati correttamente, del secondo mi stampa correttamente il nome e la matricola, ma gli assegna gli esami e la media del primo studente! Qualcuno può aiutarmi?


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

typedef struct { 
        int Matr; 
        char Nome[20]; 
        char Citta[20]; 
        } Studente; 
        
typedef struct { 
        int Matr; 
        char Esame[15]; 
        int Voto; 
        } Esame; 

    
int calcolaMedia (int somma, int esami) { 
    int media; 
    if (esami == 1) media = somma; 
    else media = somma / esami; 
    return media; 
} 


int calcolaSomma (int voto) { 
    int somma; 
    somma = voto; 
    return somma; 
} 

    
    
main() 
{ 
      FILE *fp; 
      FILE *f; 
      Studente s; 
      Esame e; 
      char citta[20]; 
      int esami = 0; 
      int somma = 0; 
      int media, trovatoEsame = 0; 
      
      if ((fp = fopen("Studenti.dat", "rb")) == NULL) { 
              fprintf(stderr, "Errore di apertura\n"); 
              exit(1); 
              } 
      if ((f = fopen("Esami.dat", "rb")) == NULL) { 
              fprintf(stderr, "Errore di apertura 2\n"); 
              exit(2); 
              } 
      
      
      printf("Citta da cercare:  "); 
      scanf("%s", citta); 
      
      
      
          while (fread(&s, sizeof(Studente), 1, fp)>0) { 
          
          if (strcmp(citta,s.Citta)==0) { 
                                        
          while (fread(&e, sizeof(Esame), 1, f)>0) { 
          
          if (s.Matr == e.Matr) { 
            trovatoEsame = 1; 
            do {esami++;} while (s.Matr != e.Matr); 
            do {somma = somma + calcolaSomma(e.Voto);} while (s.Matr != e.Matr); 
            media = calcolaMedia(somma, esami); }} 
         if (trovatoEsame) 
         printf("%d    %s    %d      %d\n\n", s.Matr, s.Nome, esami, media); 
         } 
          
         }    
      
     fclose(fp); 
     fclose(f); 
      
     getch(); 
}

Dove sbaglio?
GRAZIE MILLE!