PDA

View Full Version : [C]ritornare al main


mostec
05-12-2005, 09:41
il mio problema sarebbe di trovare una funzione o una istruzione che mi ritorna al main.

In pratica devo dare la possibilità all'utente in un gioco di reiniziare la partita in qualsiasi momento.. il problema è che nel momento che l'utente inserisce i dati il programma è alla sesta funzione annidata.
escludo l'uso di una variabile flag altrimenti complico notevolmente tutto.

in sostanza quello che mi serve sarebbe un return che invece di fare solo un passo indietro mi torni indietro completamente fino al main ovviamente buttando via tutto quello fatto sino a quel momento.


Grazie.Ciao.

ilsensine
05-12-2005, 09:47
C (standard): niente
C (POSIX): setjmp/longjmp (weee un "goto" globale!!)
C++: eccezioni

nb design discutibile. Stai interferendo con il normale flusso del programma.

andbin
05-12-2005, 10:51
il mio problema sarebbe di trovare una funzione o una istruzione che mi ritorna al main.

In pratica devo dare la possibilità all'utente in un gioco di reiniziare la partita in qualsiasi momento.. il problema è che nel momento che l'utente inserisce i dati il programma è alla sesta funzione annidata.
escludo l'uso di una variabile flag altrimenti complico notevolmente tutto.

in sostanza quello che mi serve sarebbe un return che invece di fare solo un passo indietro mi torni indietro completamente fino al main ovviamente buttando via tutto quello fatto sino a quel momento.
Ciao, la questione secondo me non è tanto quella di usare salti, goto, ecc... (come ha detto ilsensine), cosa peraltro altamente sconsigliabile. La questione semmai è come hai strutturato il tuo codice.
Immagina ad esempio:

int main (...)
{
...
do {
ripeti = gioco ();
} while (ripeti);
...
}

e in gioco() fai ritornare un valore (un true/false, un set di codici o quello che vuoi) in base a cosa vuoi fare.
Quindi dovresti porre una maggiore attenzione sulla struttura del codice. Se al sesto livello di funzione annidata hai bisogno di ritornare di brutto al main, qualcosa evidentemente non quadra. ;)