Können Sie 2 oder mehr OR-Bedingungen in einer if-Anweisung verwenden? [duplicate]

Lesezeit: 6 Minuten

Ich habe versucht, dies selbst zu testen, bevor ich im Forum danach gefragt habe, aber mein einfacher Code zum Testen schien nicht zu funktionieren.

#include <iostream>
using namespace std;

int main() {
cout << "Enter int: ";
int number;
cin >> number;
if (number==1||2||3) {
    cout << "Your number was 1, 2, or 3." << endl;
}
else if (number==4||5||6) {
    cout << "Your number was 4, 5, or 6." << endl;
}
else {
    cout << "Your number was above 6." << endl;
}
return 0;
}

Es gibt immer die erste Bedingung zurück. Meine Frage ist, ist es überhaupt möglich, mehr als 2 ODER-Bedingungen zu haben? Oder ist meine Syntax falsch?

  • Ihre Syntax ist falsch. if(number == 1 || number == 2 || number == 3)

    – Ninja im Ruhestand

    8. Januar 2012 um 21:23 Uhr

  • Ich würde gerne ein Beispiel mit sogar zwei sehen, das funktioniert, das wird NIE funktionieren. Was sind Ihre Erwartungen an die Bewertungsreihenfolge und was würden Sie sich vorstellen? if(2) würdest du?

    – Martin Kristiansen

    8. Januar 2012 um 21:25 Uhr


  • @MartinKristiansen Wenn Sie Abzugsfähigkeiten verwenden, können Sie möglicherweise erraten, dass ich eine Eingabe von 1, 2 oder 3 möchte, um die erste Bedingung zurückzugeben. eine Eingabe von 4, 5 oder 6, um die Sekunde zurückzugeben; und eine Eingabe von irgendetwas anderem, um die dritte Bedingung zurückzugeben. Anstatt jemanden zu verprügeln, der eindeutig neu in C++ ist, könnten Sie einen besseren Weg vorschlagen, meinen Code zu schreiben.

    Benutzer1116768

    8. Januar 2012 um 21:30 Uhr

Konnen Sie 2 oder mehr OR Bedingungen in einer if Anweisung verwenden
Ted Hopp

Sie müssen Ihre Tests anders codieren:

if (number==1 || number==2 || number==3) {
    cout << "Your number was 1, 2, or 3." << endl;
}
else if (number==4 || number==5 || number==6) {
    cout << "Your number was 4, 5, or 6." << endl;
}
else {
    cout << "Your number was above 6." << endl;
}

So wie Sie es gemacht haben, wurde die erste Bedingung so interpretiert, als ob sie so geschrieben wäre

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

Der logische Oder-Operator (||) ist so definiert, dass sie zu einem wahren Wert ausgewertet wird, wenn die linke Seite wahr ist oder wenn die linke Seite falsch und die rechte Seite wahr ist. Seit 2 ein wahrer Wert ist (wie er ist 3), wird der Ausdruck unabhängig vom Wert von als wahr ausgewertet number.

  • Setzen Sie keine Leerzeichen um ||? Es ist ein bisschen schwer zu lesen, finden Sie nicht? 🙂

    – Sergio Tulentsev

    8. Januar 2012 um 21:25 Uhr


  • Nein, ich verwende keine Leerzeichen um einen meiner Operatoren (+, -, ||, < usw.). Ich finde es schwieriger, mit all diesen Leerzeichen zu lesen.

    Benutzer1116768

    8. Januar 2012 um 21:26 Uhr


  • Oder besser: number >= 1 && number <= 3. Setzen Sie die Leerzeichen btw ein.

    – Fred Foo

    8. Januar 2012 um 21:26 Uhr


  • Egal, wie Sie Code formatieren, es wird immer jemanden geben, der es anders bevorzugen würde. Ich bevorzuge im Allgemeinen Räume um Dinge wie == und || aber kein Leerzeichen dazwischen if und (. Ich setze auch nicht die { am Ende der Zeile, aber es stört mich nicht annähernd so sehr wie früher. 🙂

    – Ninja im Ruhestand

    8. Januar 2012 um 21:34 Uhr

Während Sie (wie andere gezeigt haben) Ihre Tests neu schreiben können, um zuzulassen, was Sie wollen, denke ich, dass es sich auch lohnt, ein paar Alternativen in Betracht zu ziehen. Eine wäre eine switch-Anweisung:

switch (number) { 
    case 1:
    case 2:
    case 3:
        cout << "Your number was 1, 2, or 3." << endl;
        break;
    case 4:
    case 5:
    case 6: 
        cout << "Your number was 4, 5, or 6." << endl;
        break;
    default:
        cout << "Your number was above 6." << endl;
}

Ich persönlich würde aber wahrscheinlich so vorgehen:

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];

Beachten Sie, dass Ihr Code in der jetzigen Form besagt, dass 0 und alle negativen Zahlen größer als 6 sind. Ich habe dies im ersten Beispiel in Ruhe gelassen, aber im zweiten behoben.

  • Rechts. Für meine Anwendung spielt es jedoch keine Rolle, was die Zahlen auswerten, da sie immer im Bereich von 1 bis 9 liegen, also funktioniert es für mich einfach, das erste Beispiel zu verwenden. Außerdem würde ich mich fühlen, als würde ich stehlen, wenn ich das zweite Beispiel verwenden würde, da ich es nicht selbst geschrieben habe. 😛

    Benutzer1116768

    8. Januar 2012 um 21:45 Uhr

Versuchen Sie, sie alle zu trennen. Ich bin mir ziemlich sicher, dass Ihre Syntax falsch ist

#include <iostream>
using namespace std;

int main() {
cout << "Enter int: ";
int number;
cin >> number;
if ((number==1)||(number==2)||(number==3)) {
    cout << "Your number was 1, 2, or 3." << endl;
}
else if ((number==4)||(number==5)||(number==6)) {
    cout << "Your number was 4, 5, or 6." << endl;
}
else {
    cout << "Your number was above 6." << endl;
}
return 0;
}

  • Es ist legale Syntax – nur wahrscheinlich nicht das, was er tatsächlich tut gesucht.

    – Hündchen

    8. Januar 2012 um 21:26 Uhr

  • Ich hätte klarstellen sollen. Falsch für das Verhalten, das er erwartet hatte.

    – Schwert

    8. Januar 2012 um 21:28 Uhr

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;
}

Ist meine Syntax falsch?

Ja, bitte wissen Sie, dass das, was Sie erlebt haben, passiert ist, weil (2) und (3) als wahr bewertet werden. Stattdessen würdest du Zahl == 1 || machen Zahl == 2 || Zahl == 3

number == 1 || 2 || 3

ist äquivalent zu

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

und als Ergebnis der || Betreiber ist 1 wenn entweder sein linker oder sein rechter Operand anders als ist 0wird der obige Ausdruck immer zu ausgewertet

1

Was Sie also wirklich wollen, ist der folgende Ausdruck

number == 1 || number == 2 || number == 3

Konnen Sie 2 oder mehr OR Bedingungen in einer if Anweisung verwenden
Alex

Für eine lange Liste von Optionen möchten Sie vielleicht alle Ihre Optionen in ein statisches Array oder einen Vektor einfügen und prüfen, ob sie eine Option enthalten:

#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();
    }
}

1646902813 156 Konnen Sie 2 oder mehr OR Bedingungen in einer if Anweisung verwenden
zerrissener Kerl

So muss man vergleichen

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

Du musst setzen Zahl == jedes Mal, wenn Sie es vergleichen.


Ein Profi-Tipp
Variablen immer initialisieren, int number{0};
Deklarieren Sie var nicht, ohne sie zu initialisieren.

987230cookie-checkKönnen Sie 2 oder mehr OR-Bedingungen in einer if-Anweisung verwenden? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy