[C++]Problème de boucle do...while

Résolu/Fermé
SHINTYMAN Messages postés 113 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 - 18 mai 2012 à 01:43
SHINTYMAN Messages postés 113 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 - 22 mai 2012 à 17:25
Bonjour à tous! J'ai commencé le C++ il y a peu et j'ai décidé de tester mes connaissances en me donnant un defi personnel: utiliser un mélangeur de lettre. Ce programme à pour ambition de prendre une phrase et de 'traduire' ou 'écrire' dans un code donné. Pour la conversion de phrase, je compte utiliser le string, les tableaux, une boucle for (pour la phrase donnée)... Sauf que je n'en suis même pas encore là que j'ai déja un problème!
Dû à ma connaissance limitée du C++, j'ai décidé de tester un système de choix simpliste et pour l'instant sans frioriture afin de laisser l'utilisateur choisir s'il veux ecrire ou traduire la phrase. Voici le code:

#include <iostream>

using namespace std;

int main()
{
    int choix(0);
    cout << "veux-tu ecrire (1) ou traduire (2)?" << endl;
    do
    {
        cin >> choix;
        if(choix==1 || choix==2)//on verifie que la réponse de l'utilisateur corresponde
           {
               if(choix==1)
               {
                   cout << "Tu veux ecrire...";
               }
               else
               {
                   cout << "Tu veux traduire...";
               }
           }else
            {
                cout << "Desole, mais " << choix << " n'est pas une entree correcte" << endl;
            }

    }while(choix!=1 || choix!=2); //on recommence si la réponse ne correspond pas
    return 0;
}


Quand je lance le programme, tout ce passe bien... sauf que la boucle while ne veux pas se terminer et se relance quand bien même choix vaut 1 ou 2.

Vu mon niveau, je n'arrive pas à trouver la solution... Voyez-vous le problème?



3 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
Modifié par scriptiz le 18/05/2012 à 11:54
}while(choix != 1 && choix != 2);


Remplace || par &&

Car tu continue la boucle si le choix est différent de 1 ET différent de 2.
1
Le problème vient de la condition que tu as écrite dans ton while. En effet, il relance la boucle quand le choix est différent de 1 ou de 2. Quand il est à 2, il est différent de 1, et vice-versa, donc il recommence la boucle à chaque fois. Il faut donc écrire :while(choix!=1 && choix!=2);
1
SHINTYMAN Messages postés 113 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 26 décembre 2014 153
22 mai 2012 à 17:25
Merci beaucoup, ca marche ^^
0