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); }

Rispondi quotando
