Проверка нескольких условий

Здравствуйте.
Впервые делаю устройство с экраном и несколькими кнопками, в котором уже существенное кол-во раз используется оператор if. Не смог найти объяснение работы else, когда в if несколько условий.
Прошу Вас помочь, немного растолковать.
Например if (PWMstate==HIGH&&PWMmode==LOW) //если ШИМ разреш, а состояние ВЫКЛ: {analogWrite(mosfet,PWMduty); PWMmode=HIGH;} if (PWMstate==LOW&&PWMmode==HIGH) //если ШИМ запрещ, а состояние ВКЛ: {digitalWrite(mosfet,LOW); PWMmode=LOW;}

  1. почему стоит исп else а не два оператора if как в этом фрагменте ?
  2. как будет “думать” else если его применить вместо второго if
    Понимаю, что вопрос из азов но как не странно можно что то писать и не зная данных закономерностей, а хотелось бы понять.
    В продолжение темы на старом форуме - Проверка нескольких условий | Аппаратная платформа Arduino
    Спасибо.

В операторе if всегда одно условие.

Где стоит? В Вашем примере я никакого else не вижу, хотя … (см. важную ремарку ниже)

Он никак не думает, думает программист. В приведённом примере использование else вместо второго if не эквивалентно приведённому коду.

Важная ремарка

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

if (PWMstate==HIGH&&PWMmode==LOW) //если ШИМ разреш, а состояние ВЫКЛ: 
{
	analogWrite(mosfet,PWMduty); 
	PWMmode=HIGH;
} 
if (PWMstate==LOW&&PWMmode==HIGH) //если ШИМ запрещ, а состояние ВКЛ: 
{
	digitalWrite(mosfet,LOW); 
	PWMmode=LOW;
}

Сейчас же он выглядит как полная бредятина хотя бы потому, что после знака //, всё до конца строки является комментарием. Вот и посмотрите, что у Вас получается.

Обычно, посты с такими кодами, как у Вас я вообще не читаю (и многие), т.к. их читать невозможно! Не знаю, что на меня нашло сейчас, но следующих Ваших сообщений с неправильно вставленным кодом я читать не буду.

На другом форуме мне как то написали, что моё любимое:
if(){}
if(){}
if(){}
чревато неправильностями :slight_smile:
а верно так:
if(){}else{if(){}else{if(){}else{}}}
Я не поверил, пока не вляпался пару, тройку раз.
Поэтому надо чётко понимать разницу между этими вариантами, они совершенно разные с точки зрения логики.

И Вы туда же? Ну, серьёзный же человек!

А что тут обьяснять? В else попадет любой из вариантов, который не попал в исходный if

Образно говоря, если условие

IF ((Маша дура) И (Света умная))

то вариант else будет не только когда “наоборот” - “Маша умная, а Света дура”, но и все остальные комбинации тоже - когда обе девочки умные и когда обе не очень.

Что интерсно, если в исходном IF поставить вместо “И” - “ИЛИ” - расклад с else будет совершенно иным. Оставляю его вам на потренироватся.

1 лайк

Принял, спасибо. В рамках форума можно рассказать почему? … в особенности учитывая, что в if “всегда одно условие”

Спасибо, что подтвердили наличие фактической разницы, а не только стилистической. Хотелось бы понять в чём она заключается? … как не странно, во множестве интернет публикаций даются только примеры, делай-так, без пояснения сути процессов.

Ну что тут понимать то?
Вот в вашем коде два условия:

if (PWMstate==HIGH && PWMmode==LOW) //если ШИМ разреш, а состояние ВЫКЛ: 
{
	analogWrite(mosfet,PWMduty); 
	PWMmode=HIGH;
} 
if (PWMstate==LOW && PWMmode==HIGH) //если ШИМ запрещ, а состояние ВКЛ: 
{
	digitalWrite(mosfet,LOW); 
	PWMmode=LOW;
}

А где еще два варианта? - варианта, когда и PWMstate PWMmode оба LOW и варианта, когда оба HIGH. Вы эти ветки вовсе не анализируете и код в этих случаях вообще ничего делать не будет.

А если второе условие заменить на else - отрабатаются все четыре.

Поняли теперь?

2 лайка

Нет. В else отработают остальные три.

if (X == 0) { }
if (X == 1) { }
if (X  == 2) { }

вляпаться тут можно только если модифицировать переменную Х между операторами If, что на самом деле признак плохого стиля программирования.
Если писать правильно, то применение тут else будет бредом потому как любому ясно, что если X = 0, то оно уже не может быть один или два

и ? как это расходится с моим текстом?

Именно так я и попадался :slight_smile: … собственно для этого Х мне и нужна была.

Вроде, Вам уже сказали? Нет?

Напишите условия на русском, если английский смущает, будет понятнее…

Спасибо, эти два сообщения доходчиво ракскрывают суть. В голове не программиста даже такие казалось бы не сложные образы сходу не выстраиваются…с подсказками заметно быстрее осознаёшь. Товарищи, всем спасибо, понял разницу между if/else !

Это не неправильно, а просто РАЗНАЯ логика.

В случае 1, без else, будет проверяться КАЖДЫЙ if(), один за другим, независимо.

В случае 2, с else, при первом же срабатывании if() остальные пропускаются, тк уже else не срабатывает.

1 лайк

А чего тут странного?
Есть такой раздел математики - булева алгебра. И совсем не задача интернет публикаций пересказывать учебник.