Condition while impossible

Résolu/Fermé
Programath Messages postés 5 Date d'inscription jeudi 9 décembre 2021 Statut Membre Dernière intervention 17 décembre 2021 - 14 déc. 2021 à 19:39
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 15 déc. 2021 à 14:58
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
15 déc. 2021 à 11:39
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
15 déc. 2021 à 14:58
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 21210 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 20 avril 2024 6 058
14 déc. 2021 à 21:15
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
15 déc. 2021 à 07:52
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 jeudi 9 décembre 2021 Statut Membre Dernière intervention 17 décembre 2021
15 déc. 2021 à 10:48
D'accord je viens de comprendre… En remplaçant par && ça fonctionne bien !
Merci pour vos réponses ;)
0