Sortir d'une fonction tout en rentrant dans une autre [Résolu]

Signaler
Messages postés
10
Date d'inscription
lundi 18 juin 2012
Statut
Membre
Dernière intervention
29 mars 2013
-
Messages postés
10
Date d'inscription
lundi 18 juin 2012
Statut
Membre
Dernière intervention
29 mars 2013
-
Bonjours,
alors voilà je suis entrain de créer poker en winform avec un grand nombre de fonction.
Le problème c'est que mon programme rentre dans certaine fonction va rentrer dans une autre fonction sans sortir de la première, puis va rentrer dans une autre fonction et ainsi de suite.

Exemple :
fn_fontion1()
{
    fn_fonction2();
}
fn_fontion2()
{
    fn_fonction3();
}
fn_fontion3()
{
   fn_fonction1();
}


Etant donner qu'on sort pas des fonctions avant de rentrer dans les suivantes, elles se stack les unes les autres et mon programmes fini par planter a cause d'une erreur StackOverflowException.

Ce que je voudrais savoir c'est est ce qu'il y a un moyen de rentrer dans une fonction et sortir de l'ancienne en même temps, quelque chose comme :
fn_fontion1()
{
    fn_fonction2() return;
}
fn_fontion2()
{
    fn_fonction3() return;
}
fn_fontion3()
{
   fn_fonction1() return;
}

Ou carrément de sortir de la fonction n°1 depuis la n°2.

Merci d'avance pour vos réponses.

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
Salut,

et pourquoi pas tout simplement des fonctions qui retournent le numéro de la fonction suivante à appeler (aucune surcharge de la pile) :

// point d'entrée
public static void main()
{
    // logique init app

    dispatcher();

    // Logique fin app
};

void dispatcher()
{
    int retFunc = fn_fonction1(); // premier appel
    while(retFunc > 0) // boucle d'appels
    {
        switch(retFunc)
        {
            case 1: retFunc = fn_fonction1(); break;
            case 2: retFunc = fn_fonction2(); break;
            case 3: retFunc = fn_fonction3(); break;
        }
    }
}

int fn_fonction1()
{
    return 2; // a la place de fn_fonction2()

}
int fn_fonction2()
{
    return 3; // a la place de fn_fonction3()
}
int fn_fonction3()
{
   bool fin = false;

   // ... logique de fin

   if( fin )
       return 0; // stoppe la boucle d'appels
   else
       return 1; // revient à la fonction 1
}


bye...
Messages postés
10
Date d'inscription
lundi 18 juin 2012
Statut
Membre
Dernière intervention
29 mars 2013

Merci à toi yann_lo_san.
C'est vrai que je n'avais pas penser a ça merci beaucoup