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

C++ Discussion :

Fonctionnement incorrect de mon programme


Sujet :

C++

  1. #21
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Citation Envoyé par Armulis Voir le message
    Oooh! Je viens de voir un truc!
    Tu veux dire quoi par "le seul paramètre a changer"??? Je dois changer window? Pourquoi?
    Ce que je veux dire par là c'est que dans le code que tu montres la seule variable qui est modifiée dans ton switch c'est la variable window (à première vue) que tu passes en paramètre de ton constructeur, le reste n'a pas l'air d'être modifié (height, width, font et couleur).
    Donc la seule variable que tu modifie dans ta boucle c'est window (puisque tu fais window.clear() et window.display()) donc je disais juste de faire un setter dessus si toi dans ton programmes tu fais des modifications dessus dans ton constructeur ou le reste de ton code.
    Mais si c'est pas le cas tu peux oublier ma solution et juste sortir cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Texte1 A(width, height, fonte, couleur, window);
    du while, et la mettre juste au-dessus.

    Sinon regardes le post de bousk, il est très instructif et va t'aider à comprendre tes erreurs.

  2. #22
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    Aha... je vois. La solution est simple: il suffit d'instancier mes classes avant le lancement de la boucle Z (while-switch)
    Est-ce que, quand même, il existe un moyen d'empêcher les objets d'être détruits à la fin d'un cycle? (donc juste avant de remonter au début de la boucle "while"?

  3. #23
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    non, précisément pour la raison que tu quitte le bloc ou il est défini.

    En effet, tu sors de la paire { }, pour revenir à la condition de boucle. Ce faisant, tout ce qui est déclaré dans le bloc est détruit.

    Il suffit de déclarer la variable dans le scope qui englobe la boucle.
    Quitte à en créer un artificiellement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main() {
        //du code
     
        {
            int var =0;
            while (...) {
                 //utiliser var;
            }
        }
     
        //encore du code
        return 0;
    }

  4. #24
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    En tout cas, sortir simplement l'instanciation de la boucle "while" ne suffit pas à faire fonctionner le programme correctement. J'essaie avec une accolade "inutile"...

    EDIT: fausse piste: ça ne donne aucun résultat

  5. #25
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Citation Envoyé par Armulis Voir le message
    En tout cas, sortir simplement l'instanciation de la boucle "while" ne suffit pas à faire fonctionner le programme correctement. J'essaie avec une accolade "inutile"...

    EDIT: fausse piste: ça ne donne aucun résultat
    Est-ce aue tu as réglé déjà ton problème d'incrément dans ta boucle car aux dernières nouvelles tu es en boucle infinie.
    Après avec tout ce qui a été dit je ne pense pas que nous puissions faire plus, pour voir ce qui se passe regarde l'avancement de ton programme avec un debbuger, peut-être que tu n'entres jamais dans le case y = 0 (enfin selon le code que tu as posté normalement si, tu y entres au moins une fois.)

  6. #26
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    C'est pas une boucle infinie. Dans le programme complet, on finit par tomber sur z=1000, et on sort =)
    Par-contre, la machine circule correctement dans la boucle. Il suffit d'écrire un petit cout pour le vérifier, ça se voit tout de suite

  7. #27
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Tu as donc bien un code du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    RenderWindow w;
    Texte1 A(width, height, fonte, couleur, window);
    A.Set("D'ya get me, dude?"); //fait une seule fois aussi, alors pourquoi se prendre la tête avec un switch?
    for(int z=0;z<1000;z++){
        w.clear();
        A.Anime();
        w.display();
        //synchro (sinon clear survient immédiatement après display, donc on ne voit rien...)
    }
    //nettoyage si nécessaire
    ?

  8. #28
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    Exact, mais je tiens à utiliser une structure te type "while-switch", parce que le "for" me permet seulement d'incrémenter bêtement z. Je n'incrémente jamais z; je lui donne la valeur qui'il doit prendre.
    Par-exemple, dans le menu principal où z vaut 100, je peux aller à "jeu" (z=110), "options" (z=120) ou "quitter" (z=1000). Tu comprends comment ça marche?

  9. #29
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je comprends que tu n'as jamais entendu parler de state-machine, du pattern State ou d'enum.

    En gardant ton style:
    • Ton z devrait s'appeler status ou currentStep
    • les valeurs devraient être définie dans une énum


    Le pattern State propose beaucoup mieux:
    une classe State avec une méthode virtuelle affiche(...), et une autre next() qui dit quel est l'état suivant.
    des classes qui en hérite pour l'implémenter: Menu, Jeu, Credits, Chargement...
    Et une variable qui indique quel est l'état courant.

    Nous avons des cours dédiés, très bien fait. Je n'ai juste pas le temps de le chercher.
    Après tout, nos cours sont riches, tu feras probablement des détours en voyant les autres cours

  10. #30
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    OK, donc en gros z n'est pas un compteur mais un multi-state, au temps pour moi...
    PS: j'espère que dans le vrai code tu travailles avec des constantes nommées, parce que tu n'as pas idée de la vitesse à la quelle on oublie que 235 veut dire menu et 3.14116[...] veut dire quitter...
    A vrai dire, séparer la condition de fin dans un indicateur booléen sortir, initialement à false, serait sans doute bien plus facile à lire...

    EDIT: grillé. Et la suggestion plus complète émise par leternel te permettrait de clarifier encore plus ton code...

  11. #31
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    Je me doutais bien qu'il devait exister des outils plus complets que ma seule imagination. Je prends note et je me réserve ça pour le prochain jeu. =)

  12. #32
    Membre très actif
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Par défaut
    Oh zut, je viens de trouver la solution! =D
    Tout se passait très bien, en fait, mais une bête faute de signe a décalé tout l'affichage en-dehors de l'écran. C'est pour ça que le debuggage ne donnait aucun résultat! MDR
    Désolé pour le dérangement, c'est vraiment idiot de ma part de ne pas avoir vérifié ces pistes d'abord! =D

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [patterns] conseil sur le fonctionnement de mon programme
    Par lichman dans le forum Design Patterns
    Réponses: 4
    Dernier message: 13/09/2007, 09h32
  2. Mon programme ne fonctionne plus après mise à jour de linux
    Par dybmans dans le forum GTK+ avec C & C++
    Réponses: 22
    Dernier message: 06/05/2007, 18h08
  3. Réponses: 18
    Dernier message: 19/04/2007, 17h42
  4. Mon programme ne fonctionne pas
    Par phil23 dans le forum C
    Réponses: 4
    Dernier message: 22/03/2007, 16h31
  5. Réponses: 2
    Dernier message: 30/10/2005, 14h38

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