J'ai des problèmes avec la fin de ma boucle while, même si un 5 ou un 6 n'est pas entré. Merci!

int main() {

    char choice;
    int num = 0;
    bool quit = false;

    while (!quit)
    {
        std::cin>>num;
        std::cout << num << '\n';
        if(num == 5 || 6)
        {
            quit = true;
        }
    }
    return EXIT_SUCCESS;
}
c++
-1
TurtleMayhem 3 mai 2017 à 04:58

3 réponses

Meilleure réponse

Je pense que vous vouliez dire ceci: if(num == 5 || num == 6) car votre condition || 6 est une valeur non nulle et est donc évaluée comme vraie à chaque fois.

-2
nitronoid 3 mai 2017 à 01:59

D'accord. Vous rencontrez un peu de malentendu de votre part, aggravé par une verrue en langage C.

L'opérateur == compare uniquement les valeurs, il ne cherchera pas dans une liste. Il renvoie 1 ou 0, qui représente respectivement vrai ou faux.

L'opérateur | est l'opérateur "ou binaire". Il effectue une opération comparant les valeurs de deux nombres bit par bit (c'est ce qu'on appelle une opération bit par bit). Le | définit le bit du nombre final à 1 si le même bit est 1 dans l'un des nombres donnés.

0b00 | 0b00 -> 0b0000
0b10 | 0b00 -> 0b0010
0b00 | 0b10 -> 0b0010
0b10 | 0b11 -> 0b0011

L'opérateur || est l'opérateur "ou logique", et renvoie 1, signifiant vrai, si l'une de ses expressions donne 1. Si l'expression de gauche donne 1, elle ne prend pas la peine d'exécuter la droite ( ceci est connu sous le nom de court-circuit).

CEPENDANT, lorsqu'ils ont créé C, ils ont fait quelque chose qui a tourmenté le langage depuis. Ils ont rendu la liaison == plus étroite que | dans l'ordre des opérations (également appelé priorité des opérateurs). Cela signifie que ( 1 == 2 | 3 ) ne signifie pas "le résultat de la comparaison de 1 au résultat de la prise du binaire ou de 2 et 3", mais signifie plutôt "le résultat de la prise du binaire ou de (le résultat de la comparaison de 1 et 2 ) et 3 ".

Cela signifie ( ( 1 == 2 ) | 3 ), où ( 1 == ( 2 | 3 ) ) est ce à quoi la plupart s'attendraient avant d'être mis au courant de cette bizarrerie.

Tout cela pris ensemble, votre déclaration if signifie:

if ( num == 5 ) | 6:
  quit()

Ce qui est très susceptible d'arrêter pour des nombres autres que 5 ou 6! :)

1
Michael Speer 3 mai 2017 à 02:24

Votre déclaration if ne fait pas ce que vous pensez. Essaye ça:

if(num == 5 || num == 6)

"Ou" en C ++ est || pas une seule barre.

0
Anton Savelyev 3 mai 2017 à 02:10