ABCelectronique : portail d'information dans le domaine de l'électronique

Merci de ne pas poster des messages en relation avec le piratage.


    Forums de Abcelectronique > Software / Péri-informatique
  » boucle do...while en C, comment tourner en rond
Identifiant Se souvenir de moi ?
Mot de passe
Répondre     Nouvelle discussion
boucle do...while en C, comment tourner en rond

 

philouxy
philouxy ☆☆☆☆☆☆ 18/05/2015, 12h30 #1  
Bonjour à tous,

J'ai une question de C à vous soumettre. la voici :

Dans la boucle ci-dessous, j'aimerai sortir de celle-ci quand 'car_retour' est égale à 'CHOIX_FLOTTANT' ou à 'CHOIX_ENTIER'

Code:
//--- boucle pour choisir un choix d'option do { //--- message afficher à l'utilisateur ---// .... //--- demander à l'utilisetur de choisir une option ---// .... //--- lecture du caractère en retour ---// car_retour = Select_Var_Cara(); //---condition de sortie : obliger de choisir une possibilité ---// }while((car_retour != CHOIX_ENTIER) || (car_retour != CHOIX_FLOTTANT));


mais c'est tout le contraire qui se passe, je reste dans la boucle si 'car_retour' est égale 'CHOIX_FLOTTANT' ou 'CHOIX_ENTIER'...

C'est pas logique ?!?! Je suis preneur de toutes vos explications, solus ou autres infos utiles

Amitié - by le cht'y Philou
voyageur
voyageur ★★★☆☆☆☆ 18/05/2015, 14h11 #2  
Salut,
Je n'ai pas de compilateur sous la main là mais as tu essayé ça ?
Code:
while(1) { //--- message afficher à l'utilisateur ---// .... //--- demander à l'utilisetur de choisir une option ---// .... //--- lecture du caractère en retour ---// car_retour = Select_Var_Cara(); //---condition de sortie : obliger de choisir une possibilité ---// if((car_retour == CHOIX_ENTIER) || (car_retour == CHOIX_FLOTTANT)) { break; } }

J'ai ajouté une condition avec "break" pour casser la boucle. Je pense que ça devrait fonctionner.
Tiens nous au courant.
Thyratron
Thyratron ★★★★★☆☆ 18/05/2015, 17h34 #3  
Bonjour,
La réflexion sur un test de sortie de boucle est évident quand on l'imagine avec seule valeur. Quand il y en a 2 ce peut être piégeux.
Comparer le test avec val != control1 || val != control2
avec val != control1 && val != control2.
Pour sortir une condition fausse est nécessaire.

Une vérification avec un debugger lève le doute.
brunog
brunog ★★★★★☆☆ 18/05/2015, 20h20 #4  
Posté par philouxy

'car_retour' est égale à 'CHOIX_FLOTTANT' ou à 'CHOIX_ENTIER'


la négation de cette proposition est
'car_retour' est différent de 'CHOIX_FLOTTANT' et différent de 'CHOIX_ENTIER'
__________________
A+
Bruno
dspix
dspix ★★★★★★★ 19/05/2015, 10h58 #5  
Salut,

La condition est simplement mal posée.

si (A != B ou A != C) donne :
A != B retourne 1 si A est different de B et retourne 0 si A = B
A != C retourne 1 si A est different de C et retourne 0 si A = C

dans le cas ou tu as A != B et A != C ça donne si 1 ou 1 donc ça vaut 1.
dans le cas ou tu as A = B et A != C ça donne si 0 ou 1 donc ça vaut 1
dans le cas ou tu as A != B et A = C ça donne si 1 ou 0 donc ça vaut 1

Le seul cas qui donne 0 est A=B=C

Donc tans que le résultat est 1 le while boucle...

Si tu remplaces le OU par un ET, ça donne ça :

si (A != B et A != C) donne :
A != B retourne 1 si A est different de B et retourne 0 si A = B
A != C retourne 1 si A est different de C et retourne 0 si A = C

dans le cas ou tu as A != B et A != C ça donne si 1 et 1 donc ça vaut 1.
dans le cas ou tu as A = B et A != C ça donne si 0 et 1 donc ça vaut 0
dans le cas ou tu as A != B et A = C ça donne si 1 et 0 donc ça vaut 0

Voila, ici ça marche. Des que A vaut l'une ou l'autre des valeurs, le résultat vaut 0. Le while sort.
__________________
A+
Damien
Répondre