@avion123678

Ошибка оператора условия if в c++?

Здравствуйте, почему при использование диапазона значений для переменой, оператор условия впускает любые значения переменой?
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main() {
	int hours, min;

	cout << "Input hours: ";
	cin >> hours;

	cout << "Input min: ";
	cin >> min;

	if (9 <= hours <= 17 & 0 <=  min <= 59) {  //Проблема в этой строке
		if (hours == 13 & min >= 30) {
			cout << "Close";
		}
		else if (hours == 14 & min <= 30) {
			cout << "Close";
		}
		else {
			cout << "Open";
		}
	}
	else {
		cout << "Close";
	}

	system("pause>nul");

	return 0;
}

А вот в таком случаи всё нормально?
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main() {
	int hours, min;

	cout << "Input hours: ";
	cin >> hours;

	cout << "Input min: ";
	cin >> min;

	if (hours >= 9 & hours <= 17 & min >= 0 & min <= 59) {
		if (hours == 13 & min >= 30) {
			cout << "Close";
		}
		else if (hours == 14 & min <= 30) {
			cout << "Close";
		}
		else {
			cout << "Open";
		}
	}
	else {
		cout << "Close";
	}

	system("pause>nul");

	return 0;
}
  • Вопрос задан
  • 450 просмотров
Решения вопроса 1
JaxxDexx
@JaxxDexx
if (9 <= hours <= 17 & 0 <= min <= 59)

Объясню подробно почему это не работает.
Допустим hours = 27, а min = 90, тогда
if (9 <= 27 <= 17 & 0 <=  90 <= 59) тогда
if (true <= 17 & true <= 59), тогда т.к. true = 1  
if (1 <= 17 & 1 <= 59) тогда 
if (true & true) => if (1 & 1)
в результате побитового сложения получаем if (1) => true => тело блока выполнится


Второй пример
Допустим hours = 1, а min = -1, тогда
if (9 <= 1 <= 17 & 0 <=  -1 <= 59) тогда 
if (false <= 17 & false <= 59) тогда 
if (0 <= 17 & 0 <= 59) тогда 
if (true & true) тогда 
if (1 & 1)
if (1)
true


Т.е. какие бы значения вы не подставляли, блок выполнится всегда
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@laphroaig
Я предполагаю нужно так:
if (  (hours>=9 && hours <= 17) && (min >=0 && min <= 59) )
Ответ написан
Потому что должно быть &&.
& - это битовое И, а не логическое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы