PDA

Visualizza la versione completa : Ordinamento struttura con campi char e int


DaddarioLuigi
29-10-2018, 12:53
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.





/*
================================================== ==========================
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);


}

oregon
30-10-2018, 14:15
Non capisco il tuo problema ...

DaddarioLuigi
01-11-2018, 11:13
In che senso? se effettuo l'ordinamento sul campo "media_esami" della struttura, come faccio ad ordinare nome e cognome? mi manca qualcosa..

oregon
01-11-2018, 11:30
In che senso? se effettuo l'ordinamento sul campo "media_esami" della struttura, come faccio ad ordinare nome e cognome? mi manca qualcosa..

Continuo a non capire. Quando ordini non sai scambiare i due elementi della struttura?

Lo mostri il codice che usi per l'ordinamento?

Loading