PDA

View Full Version : [C] problema main


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;
}

dreadknight
21-05-2008, 18:35
se vuoi solo il return finale, al posto dei vari

return -1;

sostituisci

exit(1);

yoghi87
21-05-2008, 18:53
ma è uguale???:confused:

eVuGEGA
21-05-2008, 19:05
ma è uguale???:confused:

exit() provoca la terminazione del processo, mentre return provoca il ritorno
alla funziona chiamante... ma nella funzione main() non c'e' differenza a livello pratico.

yoghi87
21-05-2008, 19:09
A OK GRAZIE!!

DanieleC88
21-05-2008, 20:42
Ma perché, i return fanno schifo? :D

khelidan1980
21-05-2008, 20:56
Ma perché, i return fanno schifo? :D

infatti,casomai ci vorrebbe un refactoring,ma sostituire return con exit non ha molto senso

yoghi87
21-05-2008, 23:27
si ma il mio professore non vuole vedere più di una main per funzione....come posso fare?

DanieleC88
21-05-2008, 23:30
più di una main per funzione
:wtf:

Albi89
21-05-2008, 23:45
si ma il mio professore non vuole vedere più di una main per funzione....come posso fare?

Lo capisco anche... (penso intendessi più di una RETURN per funzione)

Il modo migliore sarebbe avere una "variabile di stato" creata a inizio funzione e settata a 0.
In caso di errore, il suo valore è modificato e viene comunque ritornata dal return finale.

Ovviamente questo potrebbe richiedere una piccola riscrittura del codice: talvolta si disseminano cicli e strutture condizionali di break e return per togliersi dall'imbarazzo di condizioni di uscita non semplici.