|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.11.2015, 17:46 | #1 |
Пользователь
Регистрация: 16.08.2015
Сообщений: 40
|
Странности и магия в логическом операторе с++
Здравствуйте!
Написал позавчера тестовое приложение, которое работало и компилилось как надо. Решил доработать его и наткнулся на МАГИЮ! Все чудесно работает, но в этом то и проблема! Оно не должно работать! Код из приложения пихать не буду, ибо он мудрён, но суть такова. Логическое ИЛИ похоже работает вместо логического И. В общем, это какое то колдовство! Суть в том, что цикл должен заканчиваться после того, как я ввожу нуль. Но он не заканчивается. А вот если вместо || написать && все работает. Изначально в приложении стояло условие do while(a!=0 || b ==0) и оно работало, хотя условие это какой то звиздец. Я не понимаю в чём тут проблема. Объясните, пожалуйста. Нижеприведённый код не выходит из цикла. Хотя, должен. Код:
|
14.11.2015, 18:31 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Если выход по нулю, то и пишите "while(a!=0)".
"while(a!=0 || b!=0)" - означает, "выполнять цикл, пока A и B не станет равно нулю". "while(a!=0 && b!=0)" - "выполнять цикл, пока A или B не станет равно нулю". "while(a!=0 || b ==0)" - "выполнять цикл, пока A не станет равно нулю и B станет не нулем".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
14.11.2015, 20:07 | #3 |
Пользователь
Регистрация: 16.08.2015
Сообщений: 40
|
Либо я попал в параллельную реальность , либо что то еще. Всю жизнь логическим ИЛИ был ||, а И &&. Взять хоть ту же статью со студии.
http://cppstudio.com/post/297/ |
14.11.2015, 20:26 | #4 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
while(a!=0 || b!=0) - закончить, когда и А и В будут равны 0 Так что BDA прав, а ты запутался. Составь таблицу логическую и посмотри чему будет: Цитата:
I'm learning to live...
|
||
14.11.2015, 20:39 | #5 | |
Пользователь
Регистрация: 16.08.2015
Сообщений: 40
|
Цитата:
Продолжать если а не равно нулю ИЛИ b не равно нулю. В условии стоит ИЛИ. Закончить, когда а == 0 ИЛИ b == 0. Товарищи, ну как так то это может быть И, если это ИЛИ? Таблица правильная. Только почему вы ИЛИ называете И? Последний раз редактировалось MrQuestion; 14.11.2015 в 20:41. |
|
14.11.2015, 20:45 | #6 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
|
Потому что, по сути, записано условие продолжения цикла. Условие же выхода из цикла является отрицанием к условию продолжения.
"Если a!=0 || b!=0, то продолжать цикл" эквивалентно "Если a==0 && b==0, то выйти из цикла".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 14.11.2015 в 20:53. |
14.11.2015, 20:47 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Читается как "Пока А не равно нулю или В не равно нулю". Т.е. "Пока и А и В не равны нулю одновременно". Говорю же - составь таблицу.
I'm learning to live...
|
|
14.11.2015, 20:56 | #8 |
Пользователь
Регистрация: 16.08.2015
Сообщений: 40
|
Вот же дела. Я и не знал о таком. О какой таблице вы говорите? Учитывая, что я сейчас узнал, я не составлю верной таблицы, потому что сижу и стекаю с кресла. Вы разрушили мой мир логических операторов. Проделали дыру. Я понял, что ничего о них не знаю. И как работать с ними теперь, тоже не знаю. В учебниках такого не было...
|
14.11.2015, 21:08 | #10 |
Пользователь
Регистрация: 16.08.2015
Сообщений: 40
|
Спасибо, мистеры модераторы. Теперь придется потрахать себе мозг этими законами.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Магия с UPDATE | Zhenya-Pvl | PHP | 3 | 09.01.2014 16:07 |
Как определить на каком логическом диске установлена ОС Windows? | DeadMan1000 | Общие вопросы C/C++ | 8 | 02.06.2013 13:52 |
Магия вычисления постфиксного выражения | дотнет | Помощь студентам | 0 | 16.10.2012 20:41 |
qweqwe магия вконтакте | Web-Gangsta | Свободное общение | 10 | 27.02.2010 21:47 |
Как проверить количество свободного и занятого места на логическом диске | SeRhy | Общие вопросы Delphi | 4 | 09.06.2008 15:39 |