Я не могу заставить свои заявления 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;
}
+ Изменить
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
) оцениваются как истинные.
Логический оператор OR ||
работает только с булевыми значениями, которые не имеют соответствующих буквенных значений, таких как 6
и 7
. Вам нужно разделить свои условия на действительные логические операторы, используя реляционные операторы, доступные в C++ <,>,<=,>=,==,!,etc
. Д. Попробуйте использовать:
if (day == 1 || day == 6 || day == 7)
6
и 7
на самом деле являются истинными значениями в C++ и всегда будут соответствовать вашему условию, ваш текущий оператор эквивалентен:
if(day == 1 || true || true)
что всегда верно.
C и C++ могут интерпретировать любое числовое значение как логическое значение. Ноль - это ложь, и все остальное верно. Поэтому синтаксис выглядит так:
if ( day == 1 || 6 || 7)
интерпретируется как "если (день один) или (6 не равен нулю) или (семь не равно нулю), то..."
Правильный способ написать это
if ( day == 1 || day == 6 || day == 7)
С вашим 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)