新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1737

 
Artyom Trishkin #:

当然,程序并不是在一个单独的线程中等待终端记录一些数据。

谢谢你,我是说

 
请告诉我,在运算符for(i;i>0;i--)的中断后,表达式 "i--"或只是 "表达式3"(根据文档)被执行?我在课本上找不到。

我不明白为什么在断裂后Print(i)会不时抛出"-1";在断裂前有i--和if(i==0),这是退出命令,如果i在运算符内已经达到0。 由于i在代码中更远的地方使用,在Close[i],它产生错误 "超出范围

 
Ivan Butko 运算符for(i;i>0;i--)的中断后,表达式 "i--"或只是 "表达式3"(根据文档)被执行?我在课本上找不到。我不明白为什么在断裂后Print(i)会不时抛出"-1";在断裂前有i--和if(i==0),这是退出命令,如果i在运算符内已经达到0。 由于i在代码中更远的地方使用,在Close[i],它产生错误 "超出范围


我不明白这一点。给我看看代码
 
Ivan Butko 运算符for(i;i>0;i--)的中断后,表达式 "i--"或只是 "表达式3"(根据文档)被执行?我在课本上找不到。我不明白为什么在断裂后Print(i)会不时抛出"-1";在断裂前有i--和if(i==0),这是退出命令,如果i在运算符内已经达到0。 由于i在代码中更远的地方使用,在Close[i],它产生错误 "超出范围


在断点之后,退出循环到循环后的下一个操作者,在循环迭代到该点结束后,开始一个新的迭代。

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

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

// 在日志中说(-1),怎么会......因此,错误数组超出范围,因为Close[-1]没有发生。

,我的意思是,我的理解是否正确,在头的中断(i; i>0; i--) 之后,第三个表达式 "i--"仍然被执行?

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Оператор цикла for - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Butko for (i; i>0; i--)
{
i--;
if (i==0) break;
}

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

// 日志说(-1),怎么会这样......。因此,错误数组超出了范围,因为Close[-1]没有发生。

我的意思是,我的理解是,在标题中的中断(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 #:

是的,你做到了,但你在这次检查前把它拿走了。像这样写


aah...得到了它。明白了。

谢谢大家的及时回复。

 
Ivan Butko #:

ahh...明白了。明白了。

谢谢大家的及时回复。

你的代码打印的是0,而不是-1...

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

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

可能是-1从其他地方打印出来的,很可能整个代码都在打印机里......

在你试图解决问题之前,你需要确定它...在解决这个问题之前,要确保它的存在,并对它进行定位...

原因: