Il mio codice è collaudato con una versione ridotta della tua struttura e funziona. Studiatelo per capire come usare SortStud.
codice:#include <cstdlib> #include <iostream> using namespace std; struct Tipostud { char * Cognome; int anno; int mese; int giorno; double stipendio; }; void SortStud(Tipostud ** array, size_t elements); int StudCompare( const void *arg1, const void *arg2 ); void DisplayStud(Tipostud & stud); int main() { Tipostud a, b, c; Tipostud * arr[3]={&c, &a, &b}; a.Cognome = "Italia"; a.anno = 1990; a.mese = 9; a.giorno = 8; a.stipendio=1500; b.Cognome = "Castiglioni"; b.anno = 1958; b.mese = 8; b.giorno = 13; b.stipendio=1000; c.Cognome = "Castiglioni"; c.anno = 1932; c.mese = 8; c.giorno = 3; c.stipendio=1000; SortStud(arr,3); DisplayStud(*arr[0]); DisplayStud(*arr[1]); DisplayStud(*arr[2]); cin.sync(); cin.ignore(); return 0; } void DisplayStud(Tipostud & stud) { cout<<"---"<<endl <<"Stipendio: "<<stud.stipendio<<endl <<"Cognome: "<<stud.Cognome<<endl <<"Data di nascita: "<<stud.giorno<<"/"<<stud.mese<<"/"<<stud.anno<<endl <<"---"<<endl; } void SortStud(Tipostud ** array, size_t elements) { qsort((void *)array,elements,sizeof(*array), StudCompare); } int StudCompare(const void *arg1, const void *arg2) { Tipostud * t_arg1=*(Tipostud **)arg1, * t_arg2=*(Tipostud **)arg2; int compResult; if((compResult=(t_arg1->stipendio-t_arg2->stipendio))==0) { if((compResult=stricmp(t_arg1->Cognome,t_arg2->Cognome))==0) { if((compResult=(t_arg1->anno-t_arg2->anno))==0) { if((compResult=(t_arg1->mese-t_arg2->mese))==0) { if((compResult=(t_arg1->giorno-t_arg2->giorno))==0) { return 0; } } } } } return compResult; }

Rispondi quotando