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

Résolu
SHINTYMAN Messages postés 114 Date d'inscription   Statut Membre Dernière intervention   -  
SHINTYMAN Messages postés 114 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   425
 
}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
Raph08
 
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 114 Date d'inscription   Statut Membre Dernière intervention   153
 
Merci beaucoup, ca marche ^^
0