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
dove sbaglio?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; }

Rispondi quotando