Очевидных ошибок не вижу. Из личного опыта дебага могу подсказать "мистический" способ, связанных с унарными операторами ++ и --. Попробуй их заменить на +=1 и -=1. А вдруг случится чудо? )
Очевидных ошибок не вижу. Из личного опыта дебага могу подсказать "мистический" способ, связанных с унарными операторами ++ и --. Попробуй их заменить на +=1 и -=1. А вдруг случится чудо? )
Да нет, пробовал уже по разному и так +=1 и так x=x+1 и так x++... на результат не влияет. В принципе чудо уже случилось, я же написал что 2-ой вариант работает правильно. Просто неясно почему это не работает
if(flag == 1 && y > 0)y--; else flag = 2;
а это работает
if(flag == 1) { if(y > 0)y--; else flag = 2; }
Ведь по сути это одно и тоже.
Странно, но раньше условия записанные в таком виде прекрасно работали, сейчас же принтуется какая то билеберда:
те же условия, но записанные в другом виде работают правильно:
Кто нибудь может это прокомментировать? Такое ощущение, что с последними обновлениями поменяли приоритеты выполнения.
МТ4 билд 1170, билд компилятора 1966
Нет ошибок. Все верно, т. к. код:
if(flag == 0 && x < X) { x++; y++; } else flag = 1;
не эквивалентен коду:
if(flag == 0) { if(x < X) { x++; y++; } else flag = 1; }
Соответственно, поведение у них будет разное.
Ведь по сути это одно и тоже.
одно и то же это вот так:
if(flag==0 && x<X){ x++; y++; } else flag=1;
if(flag==0) { if(x<X) { x++; y++; } else flag=1; } else flag=1;т.е. в Вашем примере, любое не выполнение условия (flag==0) или (x<X) должно привести к выполнению flag=1;
Нет ошибок. Все верно, т. к. код:
не эквивалентен коду:
Соответственно, поведение у них будет разное.
Не поленился, проверил, поведение одинаковое.
#property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property script_show_inputs input int X = 15; int flag = 0; int x = 0; int y = 0; int flag1 = 0; int x1 = 0; int y1 = 0; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { while(!IsStopped()) { if(flag == 0 && x < X) { x++; y++; } else flag = 1; if(flag1 == 0) { if(x1 < X) { x1++; y1++; } else flag1 = 1; } if(flag == 0)Print("x= ", x, " y= ", y, " flag= ", flag); if(flag1 == 0)Print("x1= ", x1, " y1= ", y1, " flag1= ", flag1); Sleep(300); } } //+------------------------------------------------------------------+
Не поленился, проверил, поведение одинаковое.
Ну если уж проверять, то проверять не частный случай, а по всем фронтам:
input int X = 15; int flag = 2; int x = 0; int y = 0; int flag1 = 2; int x1 = 0; int y1 = 0; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { if(flag == 0 && x < X) { x++; y++; } else flag = 1; if(flag1 == 0) { if(x1 < X) { x1++; y1++; } else flag1 = 1; } Print("x= ", x, " y= ", y, " flag= ", flag); Print("x1= ", x1, " y1= ", y1, " flag1= ", flag1); }
Получим:
x1= 0 y1= 0 flag1= 2 x= 0 y= 0 flag= 1
Ну если уж проверять, то проверять не частный случай, а по всем фронтам:
Получим:
Да Игорь, Ваша правда, поведение разное...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Странно, но раньше условия записанные в таком виде прекрасно работали, сейчас же принтуется какая то билеберда:
те же условия, но записанные в другом виде работают правильно:
Кто нибудь может это прокомментировать? Такое ощущение, что с последними обновлениями поменяли приоритеты выполнения.
МТ4 билд 1170, билд компилятора 1966