Why this code doesn't print some value? : i don't understand why when i try to print values in "archivio[]" with "stampa" function,this program prints "studente","matricola","nome","cognome" correctly, but doesn't print values from "stampaEsami".

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSTUDENTI 20
    #define MAXSTRINGA 100
    #define MAXESAMI 25
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    typedef char Stringa[MAXSTRINGA];
    
    typedef enum { uno, due, tre, FC
    } AnnoCorso;
    
    typedef struct {
    	Stringa nomeEsame;
    	int voto;
    } Esame;
    
    typedef struct {
    	Esame listaEsami[MAXESAMI];
    	int numeroEsami;
    }ListaEsame; 
    
    typedef struct {
    	int matricola;
    	Stringa nome;
    	Stringa cognome;
    	AnnoCorso anno;
    	ListaEsame esami;
    } Studente;
    
    void init(Studente[], int);
    void acquisisciEsami(Studente, int);
    void stampa(Studente[], int);
    void stampaEsami(ListaEsame);
    
    void init(Studente archivio[], int n){
    	
    	int i;
    	int nEsami;
    	
    	for(i = 0;  i < n; i++){
    		printf("Studente n. %d\n", i+1);
    		printf("Inserire matricola: ");
    		scanf("%d", &archivio[i].matricola);
    		printf("Inserire nome: ");
    		scanf("%s", &archivio[i].nome);
    		printf("Inserire cognome: ");
    		scanf("%s", &archivio[i].cognome);
    		printf("Inserire il numero di esami svolti: ");
    		scanf("%d", &archivio[i].esami.numeroEsami);
    		nEsami = archivio[i].esami.numeroEsami;
    		if(nEsami != 0) {
    			acquisisciEsami(archivio[i], nEsami);
    		}
    		
    	}
    	
    }
    
    void acquisisciEsami(Studente studente, int n){
    	
    	int i;
    	
    	for(i = 0; i < n; i++) {
    		printf("Inserire nome esame:");
    		scanf("%s", studente.esami.listaEsami[i].nomeEsame);
    		printf("Inserire voto esame:");
    		scanf("%d", &studente.esami.listaEsami[i].voto);
    	}
    	 
    }
    
    void stampa(Studente archivio[], int n){
    	
    	printf("\nGli studenti presenti in archivio sono:\n");
    	
    	int i;
    	
    	for(i = 0; i < n; i++){
    		printf("Studente n. %d:\n", i+1);
    		printf("Matricola: %d\n", archivio[i].matricola);
    		printf("Nome: %s\n", archivio[i].nome);
    		printf("Cognome: %s\n", archivio[i].cognome);
    		stampaEsami(archivio[i].esami);
    	}
    }
    
    void stampaEsami(ListaEsame esami){
    	
    	 int i = 0; 
    	 int n = esami.numeroEsami;
    	
    	 for(i = 0; i < n; i++){
    	 	printf("Nome esame: %s\n", esami.listaEsami[i].nomeEsame );
    	 	printf("Voto esame: %d\n", esami.listaEsami[i].voto);
    	 }
    }
    
    int main(int argc, char *argv[]) {
    	
    	Studente studenti[MAXSTUDENTI] ;
    	int n;
    	
    	printf("Inserire il numero di studenti da memorizzare in archivio:\n ");
    	scanf("%d", &n);
    	init(studenti, n);
    	stampa(studenti, n);
    	
    	return 0;
    }