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 :

Boucle while saute une condition


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut Boucle while saute une condition
    Bonjour les experts,

    Donc voilà, je suis débutant en langage c++ et j'ai un problème avec une boucle while que j'ai intégré dans une condition if.
    Ce programme c'est quoi ?
    Et bien c'est un mini ou plutôt micro jeu (pas en 3d ni en 2d) se déroulant dans une fenêtre Windows. L'utilisateur a une vie, des questions lui son posé, en fonction de ce que répond l'utilisateur (oui ou non), et bien sa vie varie. Quand il répond non, sa affiche : Vous avez répondu non et quand il répond oui : Vous avez répondu oui, il vous reste... tant de vie. Si il répond autre chose que oui ou que non, la question est reposé.

    Alors voici le script complet :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include <iostream>
    #include <string>
     
     
    int vie(100); // déclaration de la variable global " vie "
    using namespace std;
     
    int addCoupPied()
    {
        int& Vie_CoupPied(vie);   //la variable " Vie_CoupPied " se refere à la valeur de la variable global " vie "
        int const coupPied(30);
     
        cout << " Voulez-vous prendre un coup de pied ? " << endl;
        string reponseUser;
        cin >> reponseUser;
     
     
        if(reponseUser == "oui")
        {
            Vie_CoupPied = Vie_CoupPied - coupPied;
            cout << " Vous avez choisie oui, il vous reste desormait " << vie << " de vie " << endl;
     
        }
        else if(reponseUser == "non")
        {
            cout << " Vous avez choisie non " << endl;
        }
     
        else if(Vie_CoupPied <= 0)
        {
            cout << " Perdu, vous etes mort " << endl;
        }
     
        else
        {
            cout << " Reponse incorrect. Fin du programme. " << endl;
        }
     
        return Vie_CoupPied;
    }
     
    int addBouclier()
    {
        int& Vie_Bouclier(vie);
        int bouclier(100);
        cout << " Voulez-vous vous proteger a l'aide d'un bouclier ? oui ou non " << endl;
        string reponseUser_2;
     
        cin >> reponseUser_2;
     
     
        if(reponseUser_2 == "oui")
        {
            Vie_Bouclier = Vie_Bouclier + bouclier;
            cout << " Vous avez choisie oui, vous etes desormait equipe d'un bouclier ! niveau vie avec bouclier :  " << vie << endl;
        }
        else if(reponseUser_2 == "non")
        {
            cout << " Vous avez choisie non. Vous n'etes pas proteger !" << endl;
        }
     
        else if(Vie_Bouclier <= 0)
        {
            cout << " Perdu. Vous etes mort " << endl;
        }
        else
        {
     
            while (reponseUser_2 != "oui" && reponseUser_2 != "non")
            {
                cout << " Voulez-vous vous proteger a l'aide d'un bouclier ? oui ou non " << endl;
                cin >> reponseUser_2;
     
            }
     
        }
     
        return Vie_Bouclier;
    }
     
    int explosionAtom()
    {
        int& Vie_Explosion(vie);
        int explosion(95);
     
        cout << " Attention explosion !" << endl;
        Vie_Explosion = Vie_Explosion - explosion;
     
        if(Vie_Explosion <= 0)
        {
            cout << " Perdu. Vous etes mort " << endl;
        }
        else
        {
            cout << " Vous avez ete touche ! Votre vie est desormait de " << Vie_Explosion << endl;
        }
     
        return Vie_Explosion;
    }
     
     
    int main ()
    {
     
        addCoupPied();
        addBouclier();
        explosionAtom();
     
        return 0;
     
    }
    Pour le moment j'ai intégré qu'une seule boucle while dans une condition if qui ce situe dans la fonction int addBouclier() (ligne 42).

    Le problème est, quand le programme pose la question, on répond par oui ou par non la 1ère fois (donc la boucle n'intervient pas), si on répond oui sa affiche : Vous avez répondu oui. Il vous reste tant de vie.... Si on répond non sa affiche : Vous avez répondu non. Et le programme continue comme il se doit.

    Quand la boucle intervient. La question est posé, je répond n'importe quoi, la question est donc reposé, et quand on répond normalement, si on répond oui sa n'affiche pas : Vous avez répondu oui, il vous reste tant de vie..... Quand on répond non, pareille sa n'affiche pas: Vous avez répondu non. Ce que sa fais, c'est que sa passe directement à la question suivante. Et ça, je n'aime pas, j'ai envie que mon programme soit parfait car je suis très perfectionniste, et le fait que sa fasse ça, me pose problème.
    J'ai recherché des réponses sur le net, sans succès.

    Je vous remercie d'avance pour votre précieuse aide.

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    essaye de limiter le code que tu présentes.
    Si seules 4 lignes sont utiles, inutile de nous assomer d'une centaine qui n'apporte rien.

    Pour ton "problème",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (reponseUser_2 != "oui" && reponseUser_2 != "non")
            {
                cout << " Voulez-vous vous proteger a l'aide d'un bouclier ? oui ou non " << endl;
                cin >> reponseUser_2;
     
            }
    Comment espères-tu afficher quoi que ce soit dans ta boucle si... tu n'écris aucun code d'affichage ?
    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.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Etudiant en informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Bonjour,

    essaye de limiter le code que tu présentes.
    Si seules 4 lignes sont utiles, inutile de nous assomer d'une centaine qui n'apporte rien.

    Pour ton "problème",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (reponseUser_2 != "oui" && reponseUser_2 != "non")
            {
                cout << " Voulez-vous vous proteger a l'aide d'un bouclier ? oui ou non " << endl;
                cin >> reponseUser_2;
     
            }
    Comment espères-tu afficher quoi que ce soit dans ta boucle si... tu n'écris aucun code d'affichage ?
    J'ai trouver un moyen de résoudre le problème, il faut que je refasse la condition if dans la condition if déjà existante aprés la boucle while
    Comme ça :
    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
    else
    {
     
            while (reponseUser_2 != "oui" && reponseUser_2 != "non")
            {
                cout << " Voulez-vous vous proteger a l'aide d'un bouclier ? oui ou non " << endl;
                cin >> reponseUser_2;
            }
            if(reponseUser_2 == "oui")
            {
                cout << " Vous avez repondu oui, il vous reste : " << Vie_Bouclier << " de vie " << endl;
            }
            else
            {
                cout << " Vous avez repondu non " << endl;
            }
     
    }

  4. #4
    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
    En général, pour un controle de saisie, on préfère largement un do while, pour garantir de pose la question au moins une fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do {
                cout << " Voulez-vous vous proteger a l'aide d'un bouclier ? oui ou non " << endl;
                cin >> reponseUser_2;
     
    } while (reponseUser_2 != "oui" && reponseUser_2 != "non");

Discussions similaires

  1. Boucle WHILE dans une requête Access
    Par khelilo dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/02/2013, 12h11
  2. Boucle For dans une condition de IF
    Par cloclo23 dans le forum Langage
    Réponses: 5
    Dernier message: 18/05/2012, 10h01
  3. Imbriquer une boucle for dans une condition if ?
    Par helkøwsky dans le forum Langage
    Réponses: 2
    Dernier message: 28/06/2010, 15h18
  4. Boucle while avec 2 conditions OU
    Par loonis dans le forum Prolog
    Réponses: 4
    Dernier message: 25/05/2009, 22h05
  5. probleme de boucle while dans une procedure stockée
    Par aboulemagnifique dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 08/08/2007, 12h39

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