ciao a tutti..ho fatto questo programmino
va tutto bene tranne l'ordinamento alfabetico..cioè non mi ordina alfabeticamente (in ordine crescente) per cognome..credo sia tutto ok..ma non mi ordina

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

#define maxcar 25
#define massimo 100
/*
 * 
 */
int main() {

    struct studente {
        char cognome[maxcar];
        char nome[maxcar];
        int scritto;
        int orale;
        double media;
       } studenti[massimo];


       int i, j;
       int n;
       char buffer [maxcar];
       double oral;
       double scrit;

       printf ("inserisci numero studenti : \n");
       scanf ("%d", &n);

       if ( n >= 3){
           for (i = 0; i <= massimo && i <= n - 1; i++){
               printf ("cognome : ");
               scanf ("%s", studenti[i].cognome);
               printf ("nome : ");
               scanf ("%s", studenti[i].nome);
               printf ("scritto : ");
               scanf ("%d", &studenti[i].scritto);
               printf ("orale : ");
               scanf ("%d", &studenti[i].orale);
           }

           for (i = 0; i <= massimo && i <= n - 1; i++){
               for (j = i + 1; j <= massimo && j <= n; j++){
                   if (strcmp(studenti[i].cognome,studenti[j].cognome) == -1){
                       strcpy(buffer,studenti[j].cognome);
                       strcpy(studenti[j].cognome,studenti[i].cognome);
                       strcpy(studenti[i].cognome,buffer);
                       strcpy(buffer,studenti[j].nome);
                       strcpy(studenti[j].nome,studenti[i].nome);
                       strcpy(studenti[i].nome,buffer);
                       scrit = studenti[j].scritto;
                       studenti[j].scritto = studenti[i].scritto;
                       studenti[i].scritto = scrit;
                       oral = studenti[j].orale;
                       studenti[j].orale = studenti[i].orale;
                       studenti[i].scritto = oral;

                   }
               }
                printf ("\n\ntabella in ordine alfabetico\n");
                printf ("\n%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE");
                     for (i = 0; i <= massimo && i <= n - 1; i++){
                    printf ("\n%10s%10s%10d%10d", studenti[i].cognome, studenti[i].nome, studenti[i].scritto, studenti[i].orale);
               }
           }
          


           printf ("\n\nstudenti con media >= 18\n");
           printf ("\n%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE");
           for (j = 0; j <= massimo && j <= n - 1; j++){
               studenti[j].media = ((double)studenti[j].scritto + (double)studenti[j].orale) / 2;
               if (studenti[j].media >= 18){
                   
                   printf ("\n%10s%10s%10d%10d", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale);
               }
           }
           printf ("\n\nriepilogo voti\n");
           printf ("\n%10s%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE","MEDIA");
             for (j = 0; j <= massimo && j <= n - 1; j++){
                 
                printf ("\n%10s%10s%10d%10d%10.lf", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale, studenti[j].media);
               }
           }else{
           printf ("n minore di 3\n");
           }


       
     return 0;
}
dove sbaglio?