12
votes

Pouvez-vous utiliser 2 ou plusieurs conditions dans une déclaration IF?

J'ai essayé de tester cela moi-même avant de demander au forum mais mon code simple à tester cela n'a pas semblé fonctionnant. XXX

Il renvoie toujours la première condition. Ma question est que c'est même possible d'avoir plus de 2 ou des conditions? Ou ma syntaxe est-elle incorrecte?


3 commentaires

Votre syntaxe est incorrecte. si (numéro == 1 || numéro == 2 || numéro == 3)


J'aimerais voir un exemple avec même deux qui fonctionne, cela ne fonctionnera jamais. Quelles sont vos espérions sur la commande d'évaluation et que choisiriez-vous si (2) ferait-il?


@ MartinkristitiSen utilisant des compétences en déduction, vous pourrez peut-être deviner que je veux une entrée de 1, 2 ou 3 pour renvoyer la première condition; une entrée de 4, 5 ou 6 pour renvoyer la seconde; et une entrée de quoi que ce soit d'autre pour renvoyer la troisième condition. Au lieu de frapper quelqu'un qui est clairement nouveau à C ++, vous pouvez suggérer un meilleur moyen d'écrire mon code.


9 Réponses :


14
votes

Vous devez coder votre différence de tests:

if ( (number == 1) || 2 || 3 ) {


4 commentaires

Ne mettez-vous pas d'espaces autour de || ? C'est un peu difficile à lire, ne trouvez-vous pas? :-)


Non, je n'utilise pas d'espaces autour de l'un de mes opérateurs (+, -, ||, <, etc.). Je trouve plus difficile de lire avec tous ces espaces.


Ou mieux: numéro> = 1 && numéro <= 3 . Mettre dans les espaces BTW.


Peu importe la façon dont vous formatez le code, il y aura toujours quelqu'un qui préférerait cela différemment. Je préfère généralement les espaces autour des choses comme == et || mais ne mettez pas de place entre si et (. Je ne mettez pas non plus le { à la fin de la ligne, mais cela ne me dérange pas presque autant que cela. :)



1
votes

Essayez de les séparer tous. Je suis à peu près sûr que votre syntaxe est incorrecte xxx


2 commentaires

C'est la syntaxe juridique - probablement pas ce qu'il voulait .


J'aurais dû clarifier. Incorrect pour le comportement qu'il attendait.



1
votes
if ((number==1) || (2) || (3))

0 commentaires

0
votes
if (number > 0 && number < 4) {
    cout << "Your number was 1, 2, or 3." << endl;
}
else if (number > 3 && number < 7) {
    cout << "Your number was 4, 5, or 6." << endl;
}
else if(number > 0) {
    cout << "Your number was above 6." << endl;
}

  Is my syntax incorrect?
Yes, please know that what you experienced happened because (2) and (3) evaluates to true. Instead you would do number == 1 || number == 2 || number == 3

0 commentaires

0
votes
number == 1 || number == 2 || number == 3

0 commentaires

3
votes

Pendant que vous pouvez (comme d'autres personnes l'ont affiché) ré-écris vos tests pour permettre ce que vous voulez, je pense que cela vaut également la peine d'envisager quelques alternatives. On serait un énoncé de commutation: xxx pré>

personnellement, je ferais probablement quelque chose comme ça, je ferais probablement quelque chose comme ça: p>

char const *msgs[] = {
    "Your number was 1, 2, or 3.\n",
    "Your number was 4, 5, or 6.\n"
};

if (number < 1 || number > 6)
    std::cout << "Your number was outside the range 1..6.\n";
else
    std::cout << msgs[(number-1)/3];


1 commentaires

Droit. Pour ma candidature, cependant peu importe ce que les chiffres sont évalués, car ils sont toujours dans la plage 1-9, il suffit d'utiliser le premier exemple de travail pour moi. De plus, je me sentirais comme si je volais si je devais utiliser le deuxième exemple puisque je ne l'ai pas écrit moi-même. : P



0
votes

Pour une longue liste d'options, vous pouvez souhaiter mettre toutes vos options dans une matrice statique ou un vecteur et vérifiez s'ils contiennent une option:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void menu_prompt(vector<int> list) {
    static vector<char> menuOptions{'P', 'A', 'M', 'S', 'L', 'Q', 'p', 'a', 'm', 's', 'l', 'q'};

    char user_input{};
    do {
        cout << "P - Print numbers" << endl;
        cout << "A - Add a number" << endl;
        cout << "M - Display mean of the numbers" << endl;
        cout << "S - Display the smallest number" << endl;
        cout << "L - Display the largest number" << endl;
        cout << "Q - Quit" << endl << endl;
        cout << "Enter your choice: " << endl;

        cin >> user_input;
    } while (std::find(menuOptions.begin(), menuOptions.end(), user_input) == menuOptions.end());
    if (user_input == 'P' || user_input == 'p') {
        //user_choice_print_numbers(list);
    }
    else if (user_input == 'A' || user_input == 'a') {
        //user_choice_add_numbers(list);
    }
    else if (user_input == 'M' || user_input == 'm') {
        //user_choice_mean_numbers(list);
    }
    else if (user_input == 'S' || user_input == 's') {
        //user_choice_smallest_numbers(list);
    }
    else if (user_input == 'L' || user_input == 'l') {
    //  user_choice_largest_number(list);
    }
    else if (user_input == 'Q' || user_input == 'q') {
        //user_choice_quit();
    }
}


0 commentaires

0
votes

Vous devez comparer comme celui-ci

si (numéro == 1 || numéro == 2 || numéro == 3) {...} Vous devez mettre numéro == chaque fois que vous le comparez.


un conseil pro Toujours initialiser les variables, int numéro {0}; Ne déclarez pas var sans les initialiser.


0 commentaires

0
votes

On dirait que vous souhaitez chaîner le ou code> S dans ceci: xxx pré>

ce qui précède doit être écrit comme p> xxx pré>

ou, en vérifiant si numéro code> est dans la plage [1,3] code>: p> xxx pré> Si vous souhaitez chaîner de nombreux ou code> S (qui sont pas em> gammes), vous pouvez créer une fonction de modèle d'assistance à l'aide d'une expression de pliage (C ++ 17) : p>

Exemple: p> xxx pré>

Lorsque chaînées_or code> est instancié, les expressions de pliage se dérouleront: P>

(7 == 1 || 7 == 3 || 7 == 4 || 7 == 6 || 7 == 9) // false


0 commentaires