Ciao, grazie, ho studiato la funzione ed ho capito come utilizarla. Su questa riga il mio compilatore (Dev-C++) mi da errore ([Warning] converting to `int' from `double') :
codice:
if((compResult=(t_arg1->stipendio-t_arg2->stipendio))==0)
L'ho riscitta così e sembra funzionare:

codice:
if((compResult=(static_cast<int>(t_arg1->stipendio)-static_cast<int>(t_arg2->stipendio)))==0)
Però provando con questo file che ti allego: rinominalo in .bin, l'ordinamento non viene effettuato correttamente.

Ecco il codice che ho utilizzato:

codice:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

struct Tipostud{
                                     char Nome[20];
                                     char Cognome[20];
                                     int anno;
                                     int mese;
                                     int giorno;
                                     char Ruolo[20];
                                     double stipendio;
                                     };
typedef Tipostud* Pstud;     
                                
void Inserimento (Tipostud &, char &);
void getfile(Pstud [],int );
void putfile(Pstud [],int ,int );
void stampa(Tipostud & stud);
void SortStud(Tipostud ** array, size_t elements);
int StudCompare( const void *arg1, const void *arg2 );

const char Nomefile[ ]="studenti2.bin";
const int Lrec=sizeof(Tipostud);
const int Numpers=8;

int main(){
    
    char chr;
    Tipostud studente;
    
  /*
    int Numpers;
    cout<<"Numero di persone da inserire: ";
    cin>>Numpers;
    fstream filepers;
    filepers.open("studenti.bin",ios::in|ios::out|ios::binary|ios::ate);
    if (!filepers)
     filepers.open("studenti.bin",ios::out|ios::binary|ios::trunc);
    while(Numpers>0){
    Inserimento(studente,chr);
    if (chr=='s') {
    filepers.seekp(0,ios::end);
    filepers.write((char*)&studente,Lrec);
    Numpers--; 
    }}
    filepers.close();*/
    
     Pstud PuntaP1[101];
     getfile(PuntaP1,Lrec);  
     SortStud(PuntaP1,Numpers);
     putfile(PuntaP1,Numpers,Lrec);
     
     for(int k=1;k<=Numpers;k++){
             stampa(*PuntaP1[k]);
             }
    
    
    
    system("pause");
    return 0;
    
}

   void Inserimento (Tipostud &pers1, char &ch)
   
{

   cout << "INSERIMENTO PERSONE" << endl << endl;
   cout << "Cognome= ";
   cin >> pers1.Cognome;
   cout << "Nome= ";
   cin >> pers1.Nome;
   cout << "Data di Nascita (GG MM AAAA)= ";
   cin >> pers1.giorno >> pers1.mese >> pers1.anno;
   cout << "Ruolo= ";
   cin >> pers1.Ruolo;
   cout << "Stipendio= ";
   cin >> pers1.stipendio;
   cout << "Salva (s/n)? ";
   cin >> ch;
   
}

void getfile(Pstud PuntaP1[],int Lrec){
     
     fstream file;
     Tipostud studente;
     file.open("studenti2.bin",ios::in|ios::out|ios::binary|ios::ate);
     if (!file)
     file.open("studenti2.bin",ios::out|ios::binary|ios::trunc);

     int Numstud=file.tellg()/Lrec;

     file.seekg(0,ios::beg);
           
     for(int i=1;i<=Numstud;i++){
             
             file.read((char*) &studente,Lrec);
            
             PuntaP1[i]=new Tipostud;
             *PuntaP1[i]=studente;
             }
     file.close(); 
     
}

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=(static_cast<int>(t_arg1->stipendio)-static_cast<int>(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;
}
     

void putfile(Pstud Punt[],int Numero,int Lrec){
     
     fstream file;
     file.open("studenti.bin",ios::out|ios::ate|ios::binary);
     
     if (!file)
      file.open("studenti.bin",ios::out|ios::binary|ios::trunc);
      
     for(int i=1;i<=Numero;i++){
             file.write((char*) &*Punt[i],Lrec);
             }
}

void stampa(Tipostud & stud){
     
   cout<<"---"<<endl
        <<"Stipendio: "<<stud.stipendio<<endl
        <<"Cognome: "<<stud.Cognome<<endl
        <<"Data di nascita: "<<stud.giorno<<"/"<<stud.mese<<"/"<<stud.anno<<endl
        <<"---"<<endl;
}