реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прояснение if-else if
Jenya7
сообщение Jun 7 2015, 06:35
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Смотрю чужой алгоритм и понемногу схожу с ума.
В связи с этим вопрос. Выполниться ли второе условие. То есть увидим ли мы Func2().
Код
a=8;
if (a>1)
{
  Func1();
}
else if (a > 100)
{
   Func2();
}


Сообщение отредактировал Jenya7 - Jun 7 2015, 06:37
Go to the top of the page
 
+Quote Post
alexunder
сообщение Jun 7 2015, 06:58
Сообщение #2


unexpected token
****

Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



Цитата(Jenya7 @ Jun 7 2015, 08:35) *
В связи с этим вопрос. Выполниться ли второе условие. То есть увидим ли мы Func2().


второе условие не выполнится, т.к. else подразумевает варианты a<1, а случай a>100 попадает под первый if.


--------------------
А у тебя SQUID, и значит, мы умрем.
Go to the top of the page
 
+Quote Post
Wurger
сообщение Jun 7 2015, 07:01
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 24-07-12
Из: Екатеринбург
Пользователь №: 72 881



Цитата(Jenya7 @ Jun 7 2015, 12:35) *
Выполниться ли второе условие.

Нет конечно.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 7 2015, 07:33
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



то есть второе условие никогда не исполниться, потому что первым всегда исполниться первое?
то есть тут принцип switch-case?

Сообщение отредактировал Jenya7 - Jun 7 2015, 07:36
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 7 2015, 07:43
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Jenya7 @ Jun 7 2015, 10:33) *
то есть второе условие никогда не исполниться, потому что первым всегда исполниться первое?
то есть тут принцип switch-case?

Это смотря как... Если начальник прикажет, то выполняться будут оба условия. А если ему не докладывать, то только первое... Или скажем он втихаря от Вас переназначит "а"... Где-то в другом месте... Или устроит прерывание после первой строки и там это "а" изнасилует... В жизни чего только не бывает, поверьте...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 7 2015, 08:20
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



спасибо всем. понял.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 7 2015, 08:51
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(iosifk @ Jun 7 2015, 10:43) *
Какие Вы ужасы рассказываете)))


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
l1l1l1
сообщение Jun 7 2015, 10:31
Сообщение #8


Профессионал
******

Группа: Модератор FTP
Сообщений: 2 111
Регистрация: 29-12-05
Пользователь №: 12 684



Цитата(Jenya7 @ Jun 7 2015, 09:35) *
...
В связи с этим вопрос. Выполниться ли второе условие. То есть увидим ли мы Func2().
Код
a=8;
if (a>1)
{
  Func1();
}
else if (a > 100)
{
   Func2();
}

пока мы не видим, какие действия над a производит Func1(), вопрос не имеет смысла.
Go to the top of the page
 
+Quote Post
gerber
сообщение Jun 7 2015, 10:44
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(l1l1l1 @ Jun 7 2015, 14:31) *
пока мы не видим, какие действия над a производит Func1(), вопрос не имеет смысла.

Какие бы действия Func1() ни произвела с a - в ветку else уже входа не будет, соответственно, не будет проверки второго условия и входа в Func2().
Единственный вариант выполнить Func2() - это дважды изменить а где-то вне этой ветки, в прерывании, например. Первый раз между присвоением a=8; и проверкой условия (а должно стать <= 1) и второй раз строго между входом в ветку else и проверкой второго условия (а должно стать > 100). Это практически невероятное поведение.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
l1l1l1
сообщение Jun 7 2015, 11:05
Сообщение #10


Профессионал
******

Группа: Модератор FTP
Сообщений: 2 111
Регистрация: 29-12-05
Пользователь №: 12 684



Цитата(gerber @ Jun 7 2015, 13:44) *
Какие бы действия Func1() ни произвела с a - в ветку else уже входа не будет, соответственно, не будет проверки второго условия и входа в Func2().
Единственный вариант выполнить Func2() - это дважды изменить а где-то вне этой ветки, в прерывании, например. Первый раз между присвоением a=8; и проверкой условия (а должно стать <= 1) и второй раз строго между входом в ветку else и проверкой второго условия (а должно стать > 100). Это практически невероятное поведение.
да, вы всё верно написали, я был неправ.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 7 2015, 15:38
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(l1l1l1 @ Jun 7 2015, 16:31) *
пока мы не видим, какие действия над a производит Func1(), вопрос не имеет смысла.

Вы не правы. Пока мы не видим, что из себя представляет a, вопрос не имеет смысла rolleyes.gif
a может быть например экземпляром класса с перегруженными операторами сравнения и поведение их может быть каким угодно, в том числе и верным может быть условие: а <= 1 && a > 100
Go to the top of the page
 
+Quote Post
l1l1l1
сообщение Jun 7 2015, 20:40
Сообщение #12


Профессионал
******

Группа: Модератор FTP
Сообщений: 2 111
Регистрация: 29-12-05
Пользователь №: 12 684



Цитата(jcxz @ Jun 7 2015, 18:38) *
Вы не правы. Пока мы не видим, что из себя представляет a, вопрос не имеет смысла rolleyes.gif ...
вы тоже правы.
и хотелось бы точно знать, на каком именно ЯВУ написан код, и для какого компилятора.
а то мало ли что... rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 07:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01445 секунд с 7
ELECTRONIX ©2004-2016