yoghi87
21-05-2008, 17:13
Salve a tutti, ho un problema, ho una funzione main funzionante però ci sono troppi return, e io ne vorrei solo uno finale come posso fare?Grazie
La main è questa:
int main(void)
{
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);
return -1;
}
pStud = malloc(NumRecords * sizeof(Studenti));
if(!pStud)
{
printf("Memoria insufficiente.\n");
return -1;
}
pStudTemp = malloc(NumRecords * sizeof(Studenti));
if(!pStudTemp)
{
printf("Memoria insufficiente.\n");
return -1;
}
if ( !LeggiRecords(szNomeFileIn, pStud) )
{
printf("Errore nella lettura dei records.\n");
return -1;
}
while ( 1 )
{
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");
return -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:
return 0;
}
}
}
if ( pStud )
free(pStud);
if ( pStudTemp )
free(pStudTemp);
return 0;
}
La main è questa:
int main(void)
{
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);
return -1;
}
pStud = malloc(NumRecords * sizeof(Studenti));
if(!pStud)
{
printf("Memoria insufficiente.\n");
return -1;
}
pStudTemp = malloc(NumRecords * sizeof(Studenti));
if(!pStudTemp)
{
printf("Memoria insufficiente.\n");
return -1;
}
if ( !LeggiRecords(szNomeFileIn, pStud) )
{
printf("Errore nella lettura dei records.\n");
return -1;
}
while ( 1 )
{
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");
return -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:
return 0;
}
}
}
if ( pStud )
free(pStud);
if ( pStudTemp )
free(pStudTemp);
return 0;
}