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

Messages postés
10
Date d'inscription
lundi 18 juin 2012
Dernière intervention
29 mars 2013
- - Dernière réponse : Smookii
Messages postés
10
Date d'inscription
lundi 18 juin 2012
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.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
3
Merci
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...

Merci yann_lo_san 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
10
Date d'inscription
lundi 18 juin 2012
Dernière intervention
29 mars 2013
0
Merci
Merci à toi yann_lo_san.
C'est vrai que je n'avais pas penser a ça merci beaucoup
Commenter la réponse de Smookii

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.