Condition while impossible
Résolu
Programath
Messages postés
8
Statut
Membre
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 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 :)
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
-
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. -
Bonsoir,
Pour que la boucle s’arrête, il faut que la condition soit fausse, ce qui n’est jamais le cas...
Ritchi -
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? -
D'accord je viens de comprendre… En remplaçant par && ça fonctionne bien !
Merci pour vos réponses ;)