problème de logique

problème de logique - C++ - Programmation

Marsh Posté le 16-02-2003 à 20:48:25    

bon voila j'ai un problème de condition dans une partie. j'ai la portion de code suivant :  
 
sortie = ((choix !=  1) || (choix != 2) || (choix != 3) || (choix != 4));
printf("\n%d\n", sortie);
if (sortie) {printf("Choix non valide ! taper 1,2,3 ou 4" );}
 
 
avec choix et sortie deux entiers et avant un petit scanf("%d", &choix);
or pour n'importe quelle choix (1,2,3,4 ou 78 par exemple) j'ai toujours sortie égale à 1.
 
or quand je mes juste sortie = (choix != 1);  j'ai bien la condition vérifié et je peux sortir de ma boucle.
 
bref dés que je mes le || OU logique ça déconne.
quelqu'un aurait une idée d'ou ça foire ?


Message édité par lordankou le 16-02-2003 à 20:49:22

---------------

Reply

Marsh Posté le 16-02-2003 à 20:48:25   

Reply

Marsh Posté le 16-02-2003 à 20:55:34    

avec des && ce serait mieux

Reply

Marsh Posté le 16-02-2003 à 20:57:36    

if( choix < 1 || choix > 4 )
  printf(......

Reply

Marsh Posté le 16-02-2003 à 21:00:58    

ta condition est fausse : sortie sera toujours égale à 1 quoi que tu rentres ! un peu de logique enfin...
 
si tu rentres 1, alors les tests (choix != 2), (choix != 3)et  (choix != 4) seront vrais, et sortie sera égale à 1, etc...
 
met plutot ceci :
 
sortie = ((choix !=  1) && (choix != 2) && (choix != 3) && (choix != 4));
 
ça devrait aller mieux si tu veux que sortie soit égale à 1 si tu rentres une valeur différente de 1,2,3 ou 4.
 
Ou mieux : sortie = (choix > 4);
 
edit: grilled


Message édité par Harkonnen le 16-02-2003 à 21:01:46
Reply

Marsh Posté le 16-02-2003 à 21:02:41    

Code :
  1. int choix, res;
  2. do
  3. {
  4.   res=scanf("%d", &choix);
  5.   if(res==EOF)
  6.   {
  7.     // erreur d'E/S ou EOF
  8.     // il faut peut etre arreter le programme  
  9.   }
  10.   // si(res!=1)
  11.   // l'utilisateur n'a pas tapé un entier
  12. while(res!=1 || (choix<1 || choix>4));


 
c'est plutot un problème d'algo  

Reply

Marsh Posté le 16-02-2003 à 21:18:52    

Harkonnen a écrit :

ta condition est fausse : sortie sera toujours égale à 1 quoi que tu rentres ! un peu de logique enfin...
 
si tu rentres 1, alors les tests (choix != 2), (choix != 3)et  (choix != 4) seront vrais, et sortie sera égale à 1, etc...
 
met plutot ceci :
 
sortie = ((choix !=  1) && (choix != 2) && (choix != 3) && (choix != 4));
 
ça devrait aller mieux si tu veux que sortie soit égale à 1 si tu rentres une valeur différente de 1,2,3 ou 4.
 
Ou mieux : sortie = (choix > 4);
 
edit: grilled


 
merci ça marche now !!!! merci beaucoup !!!


---------------

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed