Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Игорь, думаете я неправильно сказал? Хм... Возможно, сейчас почитаю справку. Но, i в моём случае после цикла точно будет равен 5. То есть увеличение произошло, но внутрь цикла не попали. Почему?
Игорь, думаете я неправильно сказал? Хм... Возможно, сейчас почитаю справку. Но, i в моём случае после цикла точно будет равен 5. То есть увеличение произошло, но внутрь цикла не попали. Почему?
не знаю
но итераторы тут не причем
for() - это оператор, который выполняет по очереди " 3 команды " разделенных точкой запятой - и все
что Вы там напишете, вообще не важно, за исключением того, что второе выражение должно быть логическим
но суть for() - выполни 1,2,3 по очереди - ну все просто же )))
Второе выражение i<5.
первый проход i=0, затем 1,2,3,4
внутри цикла последнее значение i=4.
То есть второе выражение пропустило 4, но не пропустило 5.
За пределами цикла i=5.
Вопрос, что произошло вперёд, увеличение i или сравнение?
Второе выражение i<5.
первый проход i=0, затем 1,2,3,4
внутри цикла последнее значение i=4.
То есть второе выражение пропустило 4, но не пропустило 5.
За пределами цикла i=5.
Вопрос, что произошло вперёд, увеличение i или сравнение?
нет
логика другая
проход начинается с момента i<5 ? - да! запустили тело цикла - тело цикла закончилось, выполнили "выражение 3" оператора for()
а присваивание - "выражение 1" - оно вообще не участвует в теле цикла, можете даже опустить присваивание i=0
можно и так цикл организовать:
UPD:
забыл привычный Вам цикл добавить в пример:
Оператор for эквивалентен следующей последовательности операторов:
выражение1;
while(выражение2)
{
оператор;
выражение3;
};
Игорь, конкретно на моём самом простом примере, Вы можете объяснить, как произошла работа цикла из 5 итераций, и почему после работы цикла i равняется 5?
ОК
2020.09.01 12:48:29.518 tst (EURUSD,H1) f1
2020.09.01 12:48:29.522 tst (EURUSD,H1) f2
2020.09.01 12:48:29.522 tst (EURUSD,H1) Тело цикла, i = 0
2020.09.01 12:48:29.522 tst (EURUSD,H1) f3
2020.09.01 12:48:29.522 tst (EURUSD,H1) f2
2020.09.01 12:48:29.522 tst (EURUSD,H1) Тело цикла, i = 1
2020.09.01 12:48:29.522 tst (EURUSD,H1) f3
2020.09.01 12:48:29.522 tst (EURUSD,H1) f2
2020.09.01 12:48:29.522 tst (EURUSD,H1) Тело цикла, i = 2
2020.09.01 12:48:29.522 tst (EURUSD,H1) f3
2020.09.01 12:48:29.522 tst (EURUSD,H1) f2
2020.09.01 12:48:29.522 tst (EURUSD,H1) Тело цикла, i = 3
2020.09.01 12:48:29.522 tst (EURUSD,H1) f3
2020.09.01 12:48:29.522 tst (EURUSD,H1) f2
2020.09.01 12:48:29.522 tst (EURUSD,H1) Тело цикла, i = 4
2020.09.01 12:48:29.522 tst (EURUSD,H1) f3
2020.09.01 12:48:29.522 tst (EURUSD,H1) f2
все работает как в справке написано:
f1 - был вызван один раз
затем f2 , затем тело цикла и лишь затем f3
окончание цикла посмотрите - только f2 был вызван - ни тело ни f3 уже не вызывались
если в данном примере "оператор" заменить на continue, то for(1; 2; 3) будет вечным циклом?
continue это просто переход. Вечный цикл будет, если условие цикла выполняется вечно.
Оператор for эквивалентен следующей последовательности операторов:
выражение1;
while(выражение2)
{
оператор;
выражение3;
};
нет не эквивалентен, в for выражение3 исполнится в любом случае, потому что continue оборвёт этот текущий проход и направит как раз к Выражению3
Вот описание из этого источника:
Почему i равно 5?
потому,что когда тело цикла закончилось в котором i=4 - было вызвано "выражение 3" - у меня f3() ,в котором было i++
следующая итерация начинается с проверки - f2() - проверили? нельзя цикл продолжать? - все тело не выполняем выходим из for
посмотрите принты в моем последнем примере, там все по очередности вызовов