IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Comment savoir si on est déjà passé dans une fonction ?


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Comment savoir si on est déjà passé dans une fonction ?
    Salut !
    J'essaie de développer une application Qt graphique mais je bloque sur un problème...
    J'aimerais savoir si c'est possible de savoir si on est deja passé dans une fonction ou non ?
    En effet j'ai une fonction B qui doit utiliser la valeur de retour de la fonction A pour effectuer des calculs.
    La première fois que je vais passer dans la fonction B, elle devra utiliser la valeur de retour de la fonction A et les fois suivantes elle devra utiliser la valeur de retour d'une fonction C.
    Quelqu'un saurait comment dois-je m'y prendre svp ?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Tu peux faire ça simplement avec une variable statique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void B() {
       static bool firstTime = true;
       int n;
       if(firstTime) {
          firstTime = false;
          n = A();
       }
       else {
          n = C();
       }
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Oh merci beaucoup =)
    Je vais essayer ça, si ça marche, je t'adore

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Ca à l'air de fonctionner, un grand merci a toi

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ca me parait au mieux bancal, en tous cas l'idée est pas terrible.
    Oui une static pourra servir à ça, mais si tu travailles avec Qt je suppose que tu as des objets, et que bien vite tu reviendras avec un "bug" "j'ai mes 2 toto, quand je lance B la première fois sur l'un, il s'initialise bien en passant par A, quand je lance B sur l'autre non".
    Parce que ton truc ça ressemble juste à avoir un flag d'initialisation sur ton objet, et non à l'utilisation d'une static.
    Il est aussi possible que tu sois bien plus dans l'erreur, mais sans contexte, cette pratique semble juste originale, en tous cas dans ton explication. Et que si ton objet a besoin d'initialisation, c'est à ça que sert le constructeur.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bon en effet, il subsiste un souci, ça marche pas comme je voudrais.
    Je vais détailler un peu mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    string Formules::on_NextDay_clicked()
    {
        string DateDuJour = "" ;
        string DateDuLendemain = "";
     
        static bool firstTime = true;
           if(firstTime)
           {
              firstTime = false;
              DateDuJour = on_Ajd_clicked();
           }
           else
           {
              DateDuJour = on_NextDay_clicked() ; /*cette ligne fait planter le programme*/
           }
     
        string sJour ;
        string sMois ;
        string sAnnee ;
     
        sJour = DateDuJour.substr(0,2) ;
        sMois = DateDuJour.substr(2,2) ;
        sAnnee = DateDuJour.substr(4,4) ;
     
        int iJour ;
        int iMois ;
        int iAnnee ;
     
        iJour = atoi(sJour.c_str()) ;
        iMois = atoi(sMois.c_str()) ;
        iAnnee = atoi(sAnnee.c_str()) ;
     
        iJour = iJour + 1 ;
     
        if ((iJour == 31 && iMois == 01) || (iJour == 31 && iMois == 03) || (iJour == 31 && iMois == 05) || (iJour == 31 && iMois == 07) || (iJour == 31 && iMois == 8) || (iJour == 31 && iMois == 10))
        {
            iJour == 01 ;
            iMois = iMois + 1 ;
        }
        if ((iJour == 29 && iMois == 02) || (iJour == 30 && iMois == 04) || (iJour == 30 && iMois == 06) || (iJour == 30 && iMois == 9) || (iJour == 30 && iMois == 11))
        {
            iJour == 01 ;
            iMois = iMois + 1 ;
        }
        if (iJour == 31 && iMois == 12)
        {
            iJour == 01 ;
            iMois == 01 ;
            iAnnee = iAnnee + 1 ;
        }
     
        stringstream sstm;
        sstm << iJour << iMois << iAnnee;
        DateDuLendemain = sstm.str() ;
        cout << DateDuLendemain << endl ;
        return DateDuLendemain ;
    }
    Voilà ou j'en suis, la fonction doit me retourner la date du lendemain à chaque fois que je clique sur le bouton,
    par exemple si je clique une premiere fois elle doit me retourner 18012016, si je reclique dessus 19012016, puis 20012016 et ainsi de suite.
    Là pour le moment elle m'affiche bien la date du lendemain (18012016) mais lorsque je reclique une seconde fois pour la date du surlendemain, le programme plante car la fonction s'appelle elle-même :/
    Je ne sais vraiment pas comment faire, j'ai essayé maintes choses, rien ne fonctionne, je ne sais pas si c'est la variable statique qui me met dans ce pétrin ou si je n'utilise pas du tout la bonne technique ou encore si quelque chose m'échappe...

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Comme tu utilises Qt, pourquoi ne pas utiliser QDate ?

    Je ne comprends pas non plus le besoin de récursivité. Pourquoi n'y a-t-il pas 1 membre de la classe qui contient la date actuelle ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Je pense que t'aurais difficilement pu faire plus compliqué.
    Un algo trivial serait
    - initialiser m_date à today à l'initialisation
    - incrémenter m_date de 1j à chaque clique

    Et en plus en utilisant Qt tu as déjà QDate qui fournit tout ça avec currentDate et addDays. Du coup la difficulté devient (quasi-)nulle.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par jo_link_noir Voir le message
    Comme tu utilises Qt, pourquoi ne pas utiliser QDate ?

    Je ne comprends pas non plus le besoin de récursivité. Pourquoi n'y a-t-il pas 1 membre de la classe qui contient la date actuelle ?
    Je ne savais pas l'utiliser au moment où j'ai commencer a coder mon application mais maintenant je regrette :/


    Citation Envoyé par Bousk Voir le message
    Je pense que t'aurais difficilement pu faire plus compliqué.
    Un algo trivial serait
    - initialiser m_date à today à l'initialisation
    - incrémenter m_date de 1j à chaque clique

    Et en plus en utilisant Qt tu as déjà QDate qui fournit tout ça avec currentDate et addDays. Du coup la difficulté devient (quasi-)nulle.
    Merci je vais essayer ça !

Discussions similaires

  1. Réponses: 11
    Dernier message: 25/03/2008, 11h02
  2. Réponses: 4
    Dernier message: 15/08/2007, 22h05
  3. Tableau de char[] passé dans une fonction
    Par Joratois dans le forum C
    Réponses: 26
    Dernier message: 07/06/2007, 15h06
  4. Réponses: 3
    Dernier message: 31/07/2006, 16h42
  5. Réponses: 12
    Dernier message: 22/11/2005, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo