Salve a tutti, sto svolgendo questo esercizio: dato un file in cui sono scritti: nome cognome media esami di un gruppo di studenti, devo leggere il file e ordinare gli studenti per media. Sono riuscito a inserire tutti gli strudenti in una struttura con la quale ho definito un nuovo tipo di dato, tuttavia non riesco ad ordinare poich� nonostante io riesca a fare l�ordinamento con la media, poi non ci riesco per nome e cognome. Come mi posso muovere? Il problema � che se effettuo l�ordinamento e, ad esempio, se lo faccio trovarndo il massimo e poi scambiando, non posso fare lo stesso con i campi nome e cognome, in quanto stringhe.
codice:
/*
============================================================================
Name : 14_marzo.c
Author : Luigi Daddario
Version :
Copyright : Luigi Daddario
Description : Esercitazione del 14 marzo laboratorio di programmazione
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char nome[30];
char cognome[30];
int media_esami;
}studente;
int main(void) {
/* definisco il numero degli studenti */
int numero_studenti = calcolaNumeroStudenti("/home/luigi/Scrivania/file.txt");
studente elenco_studenti[numero_studenti];
riempiStruttura("/home/luigi/Scrivania/file.txt", elenco_studenti,10); /* inserisco i dati dal file nella struttura */
return EXIT_SUCCESS;
}
int calcolaNumeroStudenti(char nome_file[])
{
FILE *fp;
fp = fopen(nome_file, "r");
int numero_studenti = 0;
char line[256];
if(fp)
{
while(!feof(fp))
{
fgets(line, sizeof(line), fp);
numero_studenti++;
}
}
else printf("Errore nell'apertura del file");
fclose(fp);
return numero_studenti;
}
void riempiStruttura(char nome_file[], studente elenco_studenti[], int numero_studenti)
{
FILE *fp;
fp = fopen("/home/luigi/Scrivania/file.txt", "r");
int i = 0;
if(fp)
{
while(!feof(fp))
{
while(i<10){
fscanf(fp, "%s\t%s\t%d", elenco_studenti[i].nome, elenco_studenti[i].cognome, &elenco_studenti[i].media_esami);
i++;
}
}
}
else printf("Impossibile aprire il file!");
fclose(fp);
}