Ma non penso ci sia bisogno del controllo, se fai una scanf() su una variabile intera l'eventuale parte decimale del numero letto dovrebbe essere scartata in automatico no?

Comunque mi sembra di leggere alcune cose un po' strane nel codice... tralasciando le dichiarazioni sparse che non sono lecite in C, non capisco come questo ciclo

codice:
         do {
             printf("numero di studenti(massimo 20): ");
             scanf("%d",&n);
         } while(i>=2 && i<MAXDIM+1);
possa non procedere all'infinito... forse volevi scrivere n al posto di i nella condizione del ciclo?