Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2017, 22:24   #1
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию Вопрос о порядке проверки условий

Вообщем появился у меня вопрос, если есть вот такие две строчки кода на Си, то будет ли одинаковым их вывод, и почему?
При компиляции компилятор(Clang) ругается что не используется первое условие в обеих строках, по второму условию замечания нет. Обясните кто-нибудь в чём дело?
Код:
for(int i=0,j=20 ; i<20,j>10 ; i++,j--) printf("%i %i",i,j);
for(int i=0,j=20 ; j>10,i<20 ; i++,j--) printf("%i %i",i,j);
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 21.01.2017, 22:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Гуглим или читаем, что такое "оператор запятая"
p51x вне форума Ответить с цитированием
Старый 22.01.2017, 14:32   #3
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

О ней достаточно мало информации поэтому должен опять обратится к вам.
Насколько я понял из информации в интернете, то в цикле фор она делает так, что сначала работает тело цикла пока выполняется первое условие тоесть в первой строчке i<20, а во второй j>10, и только тогда переходит ко второму условию и тело цикла работает пока выполняется второе условие? Или же в каждой итерации проверяет первое условие, потом второе и только тогда тело цикла? Когда она тогда прекращает работу тела цикла, когда перестаёт выполнятся первое или второе условие? И почему тогда компилятор ругается что первое не выполняется? Если оно вообще пропускает первое условие мимо ушей, то зачем оно вообще нужно(и первое условие, и такой оператор)?
Насылаю баги по фотографии

преимущественно себе

Последний раз редактировалось CortesGames; 22.01.2017 в 14:36.
CortesGames вне форума Ответить с цитированием
Старый 22.01.2017, 15:25   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Похоже первое условие просто игнорируется. Ну поставь логическое ИЛИ (И):
Код:
 i<20 || j>10
 i<20 && j>10
А ещё лучше поменяй местами "i" с "j":
Код:
int j = 0, i = 20;
Всё разобрался я. Посмотри на 3-ри результата, какой вывод ты можешь сделать?

0.jpg
ura_111 вне форума Ответить с цитированием
Старый 22.01.2017, 15:39   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
О ней достаточно мало информации поэтому должен опять обратится к вам.
Похоже у нас с вами разные инеты и гуглы...

Цитата:
Насколько я понял из информации в интернете, то в цикле фор она делает так, что сначала работает тело цикла пока выполняется первое условие тоесть в первой строчке i<20, а во второй j>10, и только тогда переходит ко второму условию и тело цикла работает пока выполняется второе условие?
Да вы и читать не умеете...
первая ссылка в гугле:
Цитата:
Оператор запятая выполняет оба операнда (слева направо) и возвращает значение второго оператора.
вторая ссылка в гугле:
Цитата:
Рассмотрим следующее выражение:
e1 , e2
Типом и значением этого выражения являются тип и значение e2; результат вычисления e1 отбрасывается. Если правый операнд — L-значение, результатом будет L-значение.
Фор не проверяет условие по частям. Он проверяет условие продолжения. И оно работает, как описано. Вот именно поэтому:
Цитата:
компилятор ругается что первое не выполняется
Цитата:
Если оно вообще пропускает первое условие мимо ушей, то зачем оно вообще нужно(и первое условие, и такой оператор)?
А это спросите у программиста зачем он так условие составил. А оператор нужен, когда вычислить надо, но в условии он не играет роли.

Цитата:
Похоже первое условие просто игнорируется.
Может вы просто начнете язык учить, а не догадки строить?

Цитата:
Всё разобрался я.
Поздравляю вы осилили одно предложение на великом и могучем.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по созданию условий squit Microsoft Office Excel 9 18.05.2015 14:19
Расположить введенные с клавиатуры четыре целых числа в порядке возрастания и в порядке убывания tima58 Помощь студентам 7 20.03.2015 13:47
Сайт проверки позиций сайта или вопрос о технологиях rezzov PHP 1 11.06.2012 08:45
[Вопрос] Макрос для проверки столбцов на ошибки ShowMeYourStyle Microsoft Office Excel 1 04.07.2011 19:47
Вопрос на тему условий Richmond_87 Паскаль, Turbo Pascal, PascalABC.NET 1 08.01.2009 16:35