![]() |
|
Модераторы: 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 |
||||||
|
|||||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
mes, вот посмотрите... как написал код xvr . Я так же написал... и так же понимаю как он будет действовать... только почему если я использую код то ... он работает как И а не как ИЛИ?
Извините пожалуйста... просто я не понимаю до конца, но очень хочу разобратся! Может проблема в среде? Билдер 2009 Ап2 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Ну когда я в коде поставил || то цыкл ждал пока оба значения не станут меньше нуля... но там же стоит ИЛИ... смотрите первый мой пост... там код просто ждал пока оба значения не станут меньше нуля... но вроде при || программа должна ждать пока одна из переменных не станет меньше нуля...
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
правильно делал.. Это Вы опять выражаете видимое кверх ногами. Откуда меньше ?! Цикл ждет(выполняется) пока первое ИЛИ второе значение будет больше 0. Это сообщение отредактировал(а) mes - 8.4.2009, 11:27 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Цикл while ничего не ждет - он выполняется, ПОКА его условие ИСТИННО. В вашей трактовке 'цыкл ждал пока оба значения не станут меньше нуля' нужно понимать так - цикл ЗАКОНЧИЛСЯ, когда оба значения стали меньше или равны нулю. Как вы понимаете, 'ВЫПОЛНЯТЬСЯ' и 'ЗАКОНЧИТСЯ' - это 2 диаметрально противоположных условия. В while записывается первое - условие ПРОДОЛЖЕНИЯ цикла. Вы пытаетесь его трактовать как второе - условие ОКОНЧАНИЯ, а это ИНВЕРСИЯ условия в while. Т.е. цикл - while((us_hp>0) || (ai_hp>0)) Условие, при котором цикл БУДЕТ ВЫПОЛНЯТСЯ - (us_hp>0) || (ai_hp>0) Условие при котором он ЗАКОНЧИТСЯ - !( (us_hp>0) || (ai_hp>0) ) или (что то же самое) (us_hp<=0) && (ai_hp<=0) |
|||
|
||||
| Fazil6 |
|
||||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
покачану, все правильно у тебя работает. ТЫ НЕПРАВИЛЬНО представляешь себе как оно должно работать. Добавлено через 7 минут и 22 секунды
это правильно
это правильно. Так и должно быть
кто тебе Это сказал? Ничего никто не должен ждать. Не надо читать условия наоборот. У тебя написано если us_hp>0 или ai_hp>0 сделай battle(). Где тут написано
у тебя написано : пока хотябы одна из этих переменных больше нуля - крутиться в цикле |
||||||||||||
|
|||||||||||||
| J0ker |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
true это всегда true, а false это всегда false в C++ bool - встроенный тип Добавлено @ 08:27
или
или
Это сообщение отредактировал(а) J0ker - 9.4.2009, 08:28 |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "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. |