Quelle est la différence entre l’utilisation de & amp; & amp; et || dans le do… while loop?

StackOverflow https://stackoverflow.com/questions/647413

  •  22-07-2019
  •  | 
  •  

Question

#include<iostream>
using namespace std;

int main()
{

    char again;
    do
    {
        cout<<"you are in the while loop";
        cout<<"do you want to continue looping?";
        cin>>again;
    } while (again != 'n' || again != 'N');

    system("pause");
    return 0;
}

Je sais que quelque chose ne va pas avec la condition de test dans le "tant que". Mais je ne peux pas le comprendre.

lorsque l'entrée de l'utilisateur n'est ni 'n' ni 'N', la boucle doit continuer à imprimer le code "vous êtes dans la boucle while". Une fois que vous avez appuyé sur 'n' ou 'N', le programme sera terminé.

Cependant, pour mon code, le programme continuera à boucler le code quel que soit le caractère saisi. Mais quand je change le '||' Pour '& amp; & amp;', le programme peut être exécuté à votre guise. Tout le monde peut me dire ce qui se passe?

Était-ce utile?

La solution

Ceci est une question de logique booléenne commune. || signifie " ou, " ce qui signifie "tant qu'un des côtés est vrai, l'expression est vraie". Ainsi, lorsque vous passez un 'N' en majuscule à c! = 'N' || c! = 'N' le programme dit "bon, 'N' n'est pas égal à 'n' , un des côtés de l'expression est donc vrai Par conséquent, l'expression entière est vraie et il n'est pas nécessaire de vérifier le reste de l'expression. " Même lorsque vous appuyez sur 'n' en minuscule, le programme indique "bon, 'n' est égal à 'n' , mais ce n'est pas égal à 'N' , un des côtés de l'expression est donc vrai, donc l'expression entière est vraie. " C’est ce qui se passe dans votre boucle while.

D'autre part, & amp; signifie " et " ce qui signifie "les deux côtés de l'expression doivent être vrais"; lorsque vous passez un 'N' en majuscule à c! = 'n' & amp; & amp; c! = 'N' le programme pense que " 'N' n'est pas égal à 'n' , mais égal à 'N ', par conséquent, un seul côté de l'expression est vrai, donc l'expression est fausse. "

Cela devient confus, car si vous testiez pour voir si les caractères saisis étaient égaux à des valeurs particulières, vous utiliseriez || (par exemple, "je veux savoir si 'a' ou 'b' ou 'c' a été entré ")).

En gros, lorsque vous utilisez || pour une expression particulière et que vous voulez le contraire de cette expression, vous devez passer à & amp; & amp; (par exemple, Je ne veux pas de 'a' , 'b' ou 'c' ; autrement dit, la valeur ne peut pas être < code> 'a' et il ne peut s'agir de 'b' , et il ne peut s'agir de 'c' "). De même, si vous utilisiez & amp; & amp; pour une expression particulière et si vous voulez l'inverse de cette expression, vous devez utiliser || . C'est l'une des lois de De Morgan, que je vous recommanderais de lire afin d'éviter de devoir redécouvrir chacune d'elles par vous-même.

Autres conseils

Oui: || est " ou " et & amp; & amp; est "et".

Chaque caractère est soit "pas 'n'". ou "pas 'N' " car il ne peut pas être à la fois 'n' et 'N' simultanément.

Une autre manière (probablement plus simple à lire) d'écrire la condition serait:

!(again == 'n' || again == 'N')

qui signifie "l'opposé de (encore une fois est 'n' ou 'N')".

Il s'agit de l'algèbre booléenne appelée " Lois de De Morgan ".

Not (P And Q) = (Not P) Or (Not Q)
Not (P Or Q) = (Not P) And (Not Q)

Dans votre cas, vous voulez que les utilisateurs ne saisissent pas 'n' ou 'N' , ils peuvent être traduits dans cette logique.

!(again == 'n' || again == 'N')

Lors de l'application des lois de De Morgan, ce sera

(again != 'n' && again != 'N')

Pour plus d'informations, vous pouvez lire la logique de proposition

.

Bien que l'affiche originale soit contente maintenant, je n'ai pas vu cela dans les autres réponses:

(true  && true ) == true
(true  && false) == false
(false && true ) == false
(false && false) == false

(true  || true ) == true
(true  || false) == true
(false || true ) == true
(false || false) == false

!true  == false
!false == true

C'est tout!

Je comprends bien votre problème et voici l'explication:

La boucle do-while est une boucle de condition de sortie. Cela signifie que le corps de la boucle est toujours exécuté en premier. Ensuite, la condition de test est évaluée. Si la condition de test est VRAI, le programme exécute à nouveau le corps de la boucle. Si la condition de test est FALSE, la boucle se termine et l'exécution du programme se poursuit avec l'instruction suivante.

dans votre code, lorsque vous appuierez sur 'ou' N ', votre condition de test sera toujours une vraie et une fausse, alors quand vous utilisez || vous satisferez à la condition de test (true || false = true), ainsi le programme exécutera à nouveau le corps de la boucle. mais lorsque vous utilisez & amp; & amp; , cela donnera (true & false = false), la condition de test n’est plus remplie, donc le programme n’exécutera plus le corps de la boucle.

J'espère que cela vous aidera ... profitez de la programmation! Ameraradi

& amp; & amp; est un ET logique. || est un OU logique.

(également, & amp; est un bit AND, et | est un bit OR.)

vous voudrez peut-être essayer tant que (! (encore == 'n' || encore == 'N'))

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top