![]() |
|
Модераторы: bsa |
![]()
|
|
| Kirgston |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Всем доброго времени суток! Пишу программку... только вот не понимаю почему оператор || в While работает... еее как то не так... может конечно и я такой =) но.
Вроде он должен проверять 2 параметра и если один из них меньше нуля то ити дальше, а иначе вызывать Баттле. Но не знаю почему... но оно идет дальше только когда оба параметра меньше нуля... |
||||
|
|||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
тело while будет выполняться до тех пор, пока оба аргумента оператора ИЛИ не станут равными false. false - это челочисленное значение 0 true - это все остальные значения. -1 в том числе. Это сообщение отредактировал(а) zim22 - 7.4.2009, 11:40 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Насколько я понял, нужно:
battle() будет вызываться пока оба числа us_hp и ai_hp больше 0 При использовании ||, battle() будет вызываться пока одно из чисел us_hp и ai_hp больше 0 Причём если проверка первого числа не проходит, проверка второго не делается zim22: Результат операции > всегда true(1) или false(0), -1 никогда не бывает. |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 6 Всего: 54 |
||||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Так будет если написать
что эквивалентно
Лучше всегда явно указывать используемую операцию сравнения и не испльзоовать что 0 считается false, а ненулевое значение true Добавлено через 3 минуты и 39 секунд PS: в примере Soah battle() вызываться не будет |
||||
|
|||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я почему то и увидел, что так и было (без оператора >) надо зрение проверить |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
us_hp и ai_hp, наверное, глобальные. Видимо, battle() их изменяет таким образом, что цикл заканчивается только когда оба становятся меньше 0. Здесь 100% дело не в условии цикла. Kirgston, а выполнить по шагам? Ведь здесь ни чего военного. Это сообщение отредактировал(а) Albor - 7.4.2009, 13:22 |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
-------------------- |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
почитай учебник. Все именно так как ты написал, только с точностью наоборот. Пока хотябы один больше нуля, будет выполняться цикл. Т.е. то что ты называешь он работает как раз правильно. То что ты описал это работа оператора &&, а не || |
|||
|
||||
| Kirgston |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Ага хотелось бы... но не так =) при || оно просто ждет пока 2 числа станут меньше нуля...
ну я же не слепой. Я ставлю || и он у меня работает как && ! Взял из учебника. || - логическое или, && - логическое И. Когда я ставлю Или то или другое... оно ждет пока 2 значения опускаються в "меньше нуля".
Но вот не понимаю... а где тогда использовать || ? Ребята... пожалуйста обясните по простому... почему у меня && работает как || то есть он ждет пока одна из переменных не станет меньше нуля, а || работает как &&... то есть он ждет пока обе из переменных не будут меньше нуля... почему так? |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
потому что Вы условие читаете кверх ногами... где Вы нашли меньше ? Ваше условие звучит так : Пока (us_hp больше 0) или (ai_hp больше 0) делай; если заменить || на && то "или" заменится "и". |
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Ну правильно... мне надо чтобы цыкл работал пока одно из значений не станет меньше нуля... извините если я чего либо не понимаю...
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Мда, имеют место быть проблемы с переводом. Перевожу с С на человеческий:
|
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
В вашей формулировке записывается так
но тоже самое можно перефразировать, чтоб не ломать себе голову - делать пока оба значения больше или равны нулю :
второй пример читается легче, хотя оба следуют одному условию. Это сообщение отредактировал(а) mes - 8.4.2009, 10:42 |
||||||
|
|||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |