Condition while impossible

Résolu
Programath Messages postés 8 Statut Membre -  
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,

Voici une partie de monde code. Lorsque j'utilise les conditions "<" ou ">" dans mon while l'exécution fonctionne très bien cependant lorsque j'utilise "!=" cela m'interdit toutes valeurs ("saisissez votre choix" s'affiche à l'infinie).
Si quelqu'un à un conseil à me donner je prend !!
Merci d'avance :)

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int saisie_villeB()
{
    int choix;

    cout<<"Choisissez une ville: "<<endl;
    cout<<"Choix 1: Ville A"<<endl;
    cout<<"Choix 3: Ville C"<<endl;
    cout<<"Choix 4: Ville D"<<endl;
    cout<<endl;

    do{
        cout<<"Saisissez votre choix: ";
        cin>>choix;
    }while (choix !=1 || choix!=3 || choix !=4); 
    return choix;
}




Configuration: Windows / Chrome 96.0.4664.93

4 réponses

Dalfab Messages postés 720 Statut Membre 101
 
C'est un erreur très fréquente que presque tout le monde a fait au moins une fois.

On connait la condition de sortie qui est : "je veux ceci OU cela".
Comme on doit écrire la condition pour recommencer c'est l'inverse : "je ne veux ni ceci ni cela". Et on a toujours le OU en tête. Mais le test à faire est bien : "je ne veux pas ceci ET je ne veux pas cela". On peut aussi l'écrire : je veux l'inverse de "ceci ou cela". Ce qui donne ici:
} while (choix!=1  &&  choix!=3  &&  choix!=4); 
// ou bien en faisant mieux apparaitre la condition de sortie
} while ( !(choix==1 || choix==3 || choix==4) );



Ça se retrouve par l'algèbre de Boole ou par le bon sens.
1
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Oui, je suis assez adapte de cette façon de faire. On détermine les conditions recherchées et on utilise l'opérateur de négation pour exprimer la condition de sortie de la boucle.

Je trouve que cela se lit plus naturellement comme : tant qu'on n'est pas dans l'une des situations suivantes ...
0
_Ritchi_ Messages postés 22345 Statut Contributeur 6 104
 
Bonsoir,

Pour que la boucle s’arrête, il faut que la condition soit fausse, ce qui n’est jamais le cas...

Ritchi
0
Dalfab Messages postés 720 Statut Membre 101
 
Bonjour,

Et oui, ta condition est toujours vraie. Ton "OU" n'est pas une bonne idée.
Prenons des exemples:
- si choix vaut 9, ça revient à faire : si VRAI OU VRAI OU VRAI, 3 bonnes raisons pour être VRAI.
- si choix vaut 1, ça revient à faire : si FAUX OU VRAI OU VRAI, 2 bonnes raisons pour être VRAI.
Et tu sûr que c'est bien "OU" qu'il faut utiliser?
0
Programath Messages postés 8 Statut Membre
 
D'accord je viens de comprendre… En remplaçant par && ça fonctionne bien !
Merci pour vos réponses ;)
0