Можете ли вы использовать 2 или более условий ИЛИ в операторе if? - PullRequest
8 голосов
/ 09 января 2012

Я пытался проверить это сам, прежде чем спрашивать на форуме, но мой простой код для проверки этого, похоже, не сработал.

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

Всегда возвращает первое условие.У меня вопрос, возможно ли вообще иметь более двух условий ИЛИ?Или мой синтаксис неверен?

Ответы [ 6 ]

11 голосов
/ 09 января 2012

Вам нужно кодировать свои тесты иначе:

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

Как вы это делали, первое условие интерпретировалось так, как если бы оно было написано так

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

Логический или оператор (||) определен для оценки истинного значения, если левая сторона истинна или если левая сторона ложна, а правая сторона истинна. Поскольку 2 является истинным значением (как и 3), выражение оценивается как истинное независимо от значения number.

3 голосов
/ 09 января 2012

Хотя вы можете (как показали другие) переписать свои тесты, чтобы разрешить то, что вы хотите, я думаю, что стоит также рассмотреть пару альтернатив. Можно было бы сказать следующее:

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

Лично я бы, наверное, сделал что-то вроде этого:

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

Обратите внимание, что в текущем коде написано, что 0 и все отрицательные числа больше 6. Я оставил это в первом примере один, но исправил во втором.

1 голос
/ 09 января 2012
if (number==1||2||3)

Этот код может быть заключен в скобки, как

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

или другими словами if(number == 1 || true || true), всегда приводя к истине. Сравните по одному (number == 1 || number == 2 || number == 3) или с диапазонами (number >= 1 && number <= 3).

1 голос
/ 09 января 2012

Попробуйте выделить их всех.Я почти уверен, что ваш синтаксис неправильный

#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;
}
0 голосов
/ 09 января 2012
number == 1 || 2 || 3

эквивалентно

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

и в результате оператор || равен 1, если его левый или правый операнд отличается от 0, выражениевыше всегда оценивается как

1

, поэтому вы действительно хотите получить следующее выражение

number == 1 || number == 2 || number == 3
0 голосов
/ 09 января 2012
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;
}

Мой синтаксис неверен?

Да, пожалуйста, знайте, что то, что вы испытали, произошло, потому что (2) и (3) оценивается как true.Вместо этого вы должны сделать число == 1 ||число == 2 ||номер == 3

...