Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1737

 
Artyom Trishkin #:

Конечно же, программа не ждёт пока терминал в отдельном потоке выводит в журнал какие-то данные.

Спасибо, имею ввиду

 
Скажите, пожалуйста, после break в операторе for (i; i>0; i--) выражение "i--" или просто "выражение 3" (по документации) исполняется? Не нашёл в учебнике.

Не пойму, почему время от времени вылетает "-1", если после фора проверить Print(i);, перед брейком стоят i-- и if (i==0), то есть, команда выхода, если уже внутри оператора i достигло 0. Поскольку i используется еще дальше по коду, в Close[i], то выдаёт ошибку array out of range 

 
Ivan Butko #:
Скажите, пожалуйста, после break в операторе for (i; i>0; i--) выражение "i--" или просто "выражение 3" (по документации) исполняется? Не нашёл в учебнике.

Не пойму, почему время от времени вылетает "-1", если после фора проверить Print(i);, перед брейком стоят i-- и if (i==0), то есть, команда выхода, если уже внутри оператора i достигло 0. Поскольку i используется еще дальше по коду, в Close[i], то выдаёт ошибку array out of range 

Ничего не понял. Код в студию
 
Ivan Butko #:
Скажите, пожалуйста, после break в операторе for (i; i>0; i--) выражение "i--" или просто "выражение 3" (по документации) исполняется? Не нашёл в учебнике.

Не пойму, почему время от времени вылетает "-1", если после фора проверить Print(i);, перед брейком стоят i-- и if (i==0), то есть, команда выхода, если уже внутри оператора i достигло 0. Поскольку i используется еще дальше по коду, в Close[i], то выдаёт ошибку array out of range 

После брейк выход из цикла на следующий за циклом оператор, после континью завершение итерации в этом месте и начало новой. 

 
Valeriy Yastremskiy #:

После брейк выход из цикла на следующий за циклом оператор, после континью завершение итерации в этом месте и начало новой. 

Секундочку, ниже код

MakarFX #:
Ничего не понял. Код в студию

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// В журнале пишет (-1), как так... и, отсюда ошибка array out of range, поскольку Close[-1] не бывает. 

То есть, правильно я понимаю, что после break в заголовке (i; i>0; i--) третье выражение "i--" всё равно исполняется?

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Оператор цикла for - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Butko #:

Секундочку, ниже код

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// В журнале пишет (-1), как так... и, отсюда ошибка array out of range, поскольку Close[-1] не бывает. 

То есть, правильно я понимаю, что после break в заголовке (i; i>0; i--) третье выражение "i--" всё равно исполняется?

Правильно пишет

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);
Вы отнимаете не только в заголовке, но и в теле цикла.
 
Konstantin Nikitin #:

Правильно пишет

Не спрашивайте, что за чухню в коде я пишу. Просто хочу понять нюансы этого оператора) Вроде как в теле я указал "пора уходить отсюда, ведь i=0", а оператор берёт и ещё раз выполняет выражение, хотя должен передать управление следующему оператору

 
Ivan Butko #:

Не спрашивайте, что за чухню я пишу. Просто хочу понять нюансы этого оператора) Вроде как в теле я указал "пора уходить отсюда, ведь i=0", а оператор берёт и ещё раз выполняет выражение, хотя должен передать управление следующему оператору

Да вы указали, но отняли перед этой проверкой. Напишите так

i=10;
for (i; i>0; i--)
{
if (i==0) break;
i--;
}

Print(i);
Print(Close[i]);

будет другой результат

 
Konstantin Nikitin #:

Да вы указали, но отняли перед этой проверкой. Напишите так


ааа... дошло. Понял. 

Благодарю вас всех за оперативные ответы. 

 
Ivan Butko #:

ааа... дошло. Понял. 

Благодарю вас всех за оперативные ответы. 

Ваш код распечатывает 0, а не -1..

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }
//+------------------------------------------------------------------+

Возможно -1 где то из другого места распечаталось, скорее всего весь код в принтах.. 

Прежде чем пытаться решить проблему ее нужно определить.. Убедиться что она есть и локализовать ее место, а только потом решать..

Причина обращения: