Scrivi le operazioni in una funzione che viene chiamata in default e poi fuori cosi:
void cancella(Studenti* pStud,Studenti* pStudTemp); //funzione che cancella
int main(void)
{
int nRet = 0;
char *szNomeFileIn = "Studenti.txt";
char *szNomeFileOut = "StudentiOut.txt";
int c;
int NumRecords;
Studenti *pStud, *pStudTemp;
NumRecords = OttieniNumRecordsDaFileTesto(szNomeFileIn);
if ( NumRecords <= 0 )
{
printf("Il file %s non contiene records.", szNomeFileIn);
nRet = -1;
}
else
{
pStud = malloc(NumRecords * sizeof(Studenti));
if(!pStud)
{
printf("Memoria insufficiente.\n");
nRet = -1;
}
else
{
pStudTemp = malloc(NumRecords * sizeof(Studenti));
if(!pStudTemp)
{
printf("Memoria insufficiente.\n");
nRet = -1;
}
if ( !LeggiRecords(szNomeFileIn, pStud) )
{
printf("Errore nella lettura dei records.\n");
nRet = -1;
}
while ( 1 )
{
if ( -1 == nRet )
break;
printf("\n\nInserisci una delle seguenti lettere:\n");
printf("C -> ordina per Cognome\n");
printf("M -> ordina per Matricola\n");
printf("V -> ordina per Voto\n");
printf("Una qualunque altra lettera per uscire.\n");
printf("Scelta: ");
fflush(stdin);
c = getchar();
mergesort(pStud, pStudTemp, 0, NumRecords-1, c);
if ( !ScriviRecords(szNomeFileOut, pStud, NumRecords) )
{
printf("Errore nella scrittura dei records.\n");
nRet = -1;
}
else
{
switch ( c )
{
case 'c':
case 'C':
printf("I records, ordinati per cognome, sono stati scritti nel file %s\n", szNomeFileOut);
break;
case 'm':
case 'M':
printf("I records, ordinati per matricola, sono stati scritti nel file %s\n", szNomeFileOut);
break;
case 'v':
case 'V':
printf("I records, ordinati per voto, sono stati scritti nel file %s\n", szNomeFileOut);
break;
default:
if (pStud && pStudTemp) cancella(pStud,pStudTemp);
return nret;
}
}
}
}
if (pStud && pStudTemp) cancella(pStud,pStudTemp);
return nRet;
}
}
//implementazione della funzione cancella
void cancella(Studenti* pStud,Studenti* pStudTemp)
{
free(pStud);
free(pStudTemp);
}
ciao.