Sortir d'une fonction tout en rentrant dans une autre

Résolu
Smookii Messages postés 10 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 29 mars 2013 - 12 janv. 2013 à 20:42
Smookii Messages postés 10 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 29 mars 2013 - 13 janv. 2013 à 00:05
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

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 24
12 janv. 2013 à 22:17
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...
3
Smookii Messages postés 10 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 29 mars 2013
13 janv. 2013 à 00:05
Merci à toi yann_lo_san.
C'est vrai que je n'avais pas penser a ça merci beaucoup
0
Rejoignez-nous