Condition while impossible

Résolu
Programath Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
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 706 Date d'inscription   Statut Membre Dernière intervention   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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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 21329 Date d'inscription   Statut Contributeur Dernière intervention   6 103
 
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 706 Date d'inscription   Statut Membre Dernière intervention   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 5 Date d'inscription   Statut Membre Dernière intervention  
 
D'accord je viens de comprendre… En remplaçant par && ça fonctionne bien !
Merci pour vos réponses ;)
0