Allora si tratta di aprire un file in cui ci sono i seguenti dati:COGNOME NOME ETà
es: viola giovanni 5
rosso simone 5
verde matteo 7
viola lucia 6
arancione marco 6

si chiede un programma che ordini nel seguente modo:

i ragazzi che hanno 5 anni sono:
rosso simone
viola giovanni

i ragazzi che hanno 6 anni sono:
arancione marco
viola lucia

i ragazzi che hanno 7 anni sono:
verde matteo

FINE

Essenzialmente mi interessa l'algoritmo di ordinamento delle stringhe.
Per intero il programma è il seguente:
NOTA: è inerente solo allìordinamento in ordine alfabetico

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 50 //numero max di partecipanti

struct schedastud{
char cognomestud[15];
char nomestud[15];
int annistud;
};

typedef struct schedastud studente;

main()
{
int anni[3], i=0, j, k, contalunni=0;
char nome[15], cognome[15];
studente lista[MAX], tempanni;
studente classifica[MAX];

FILE *fpscheda;

fpscheda=fopen("alunni.txt","r");
{
if (fpscheda==NULL)
printf("Errore nell'apertura del FILE");
else
{
fscanf (fpscheda,"%s %s %d", cognome, nome, &anni[i]);
while ( !feof (fpscheda))
{

strcpy ( lista[i].cognomestud,cognome );
strcpy ( lista[i].nomestud,nome );
lista[i].annistud = anni[i];

i++;
contalunni++;

fscanf (fpscheda ,"%s %s %d", cognome, nome, &anni[i]);

}
}
}
fclose ( fpscheda ); //chiusura FILE
for(i=1;i<contalunni-1;i++) //ordino la sequenza;
{
tempanni=lista[i]; //variabile temporanea per la distanza;
j=i-1;
while ( (j>=0) && (strcmp (lista[j].nomestud,tempanni.nomestud)>0))
{

lista[j+1] = lista[j]; //ordino la lista
j=j-1;
lista[j+1]=tempanni;
}
}

for(i=0;i<contalunni;i++)
{
printf ("%s %s %d",lista[i].cognomestud,lista[i].nomestud,lista[i].annistud);
printf("\n");
}


system("pause");
}