A dir la verita' non so come abbia passato la compilazione.
Per esempio:
Codice:
char materia[nm][30];
oppure
Codice:
struct s_quadrimestre{
struct s_voti{
float orale;
float scritto;
float pratico;
float media;
}voto[nm];
(dove nm e' una variabile inizializzata a 0) avrebbe dovuto generare un errore di compilazione.
Devi prima leggere il valore per le variabili nm ed nst; poi, utilizzando tale valore, vai ad allocare dinamicamente i vettori che dovranno contenere tale numero di valori.
In alternativa, potresti dichiarare delle costanti (MAX_NUM_STUDENTS, ...) e verificare che nm ed nst siano inferiori a dette costanti.