C ++ if заявления

0

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

#include <iostream> 
#include <string>
using namespace std;

int main ()
{
 int day;
    cout << " Enter day of the week " << endl;
    cin >> day;
    switch (day)
{
    case 1 : 
    case 6 : 
    case 7 :
        cout << "weekend";
        break;

    case 2 : 
    case 4 :
        cout << "going to C++ Class";
        break;

    case 3 : 
    case 5 :
        cout << "studying for C++ Class";
        break;

    default :
        cout << "invalid day number";
    }

    if ( day == 1 || 6 || 7)
        cout << "weekend" << endl;
    else
        if (day == 2 || 4)
            cout << "Going to C++ Class";
        else 
            if (day == 2 || 5)
                cout << "studying for C++ Class";
            else 
                if ( day < 1 || day > 7)
                    cout << "bad day number";





    system("pause");
    return 0;

}

Теги:

4 ответа

4

+ Изменить

if ( day == 1 || 6 || 7)

в

if ( day == 1 || day == 6 || day == 7)

И то же самое для некоторых похожи, if условия.


Исходное тестовое условие if (day == 1 || 6 || 7) эквивалентно if ((day == 1)||6||7), всегда оценивается как истинный, поскольку все ненулевые номера (в этом case, 6 и 7) оцениваются как истинные.

  • 0
    Спасибо (: только новичок в колледже пытается получить степень по информатике. Похоже, у меня долгий путь, lol. Еще раз спасибо
1

Логический оператор OR || работает только с булевыми значениями, которые не имеют соответствующих буквенных значений, таких как 6 и 7. Вам нужно разделить свои условия на действительные логические операторы, используя реляционные операторы, доступные в C++ <,>,<=,>=,==,!,etc. Д. Попробуйте использовать:

if (day == 1 || day == 6 || day == 7)

6 и 7 на самом деле являются истинными значениями в C++ и всегда будут соответствовать вашему условию, ваш текущий оператор эквивалентен:

if(day == 1 || true || true)

что всегда верно.

0

C и C++ могут интерпретировать любое числовое значение как логическое значение. Ноль - это ложь, и все остальное верно. Поэтому синтаксис выглядит так:

if ( day == 1 || 6 || 7)

интерпретируется как "если (день один) или (6 не равен нулю) или (семь не равно нулю), то..."

Правильный способ написать это

if ( day == 1 || day == 6 || day == 7)
0

С вашим if ( day == 1 || 6 || 7) он выполнит день == 1, который вернет либо 0, либо 1. Затем он будет продолжать его с ненулевыми (то есть истинными) числами и всегда дает 1 результат, т.е. истина.

измените его на if ( day == 1 || day == 6 || day == 7) if (day == 2 || day== 4) и if (day == 2 || day == 5)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню