Erreurs, bugs, questions - page 325

 
AlexSTAL:
Merde... Le terminal est accompagné de tant d'exemples... ...tant d'exemples... Le script SymbolInfoSample.mq5, par exemple
Il suffit parfois de définir de nouveaux concepts au départ. Et seulement ensuite, examinez les exemples de programmes.
 
Comment puis-je obtenir le chemin d'accès complet au fichier inclus ?


Il existe deux fonctions

__FILE__ - il ne donne que le nom du fichier

MQL5_PROGRAM_PATH - il donne le chemin vers lefichier ex5 résultant


Question - comment puis-je savoir où il se trouve dans le fichier mqh ?

 
Dans MetaEditor, le bouton "Liste des fonctions dans le fichier" ouvre la liste. Si vous faites défiler la liste vers le bas, elle se termine à P et ne va pas plus loin (le triangle noir pointant vers le bas devient inactif), bien qu'il y ait aussi des classes avec la lettre R. S'il vous plaît, réparez-le.
 
-Alexey-:
Dans MetaEditor, le bouton "Liste des fonctions dans le fichier" ouvre la liste. Si vous faites défiler la page vers le bas, elle se termine à P et n'avance plus (le triangle noir pointant vers le bas devient inactif), bien qu'il y ait des classes à R également. Veuillez corriger.

Et au moins la taille approximative de la liste quoi ? Peut-être y a-t-il une limite à la taille de la liste...
 

Je ne sais pas si c'est un bug ou si j'ai trouvé une astuce. Le code suivant fonctionne, mais donne un avertissement expression n'est pas booléenne

void OnStart()
  {
//---
   int a=3;
   int b=3;
   int c=3;
//---   
   if(a=b=c=3)Alert("a=b=c=3");
   else Alert("Условие не верно");
//---
  }
 
sergey1294:

Je ne sais pas si c'est un bug ou une astuce. Le code suivant fonctionne mais génère l'avertissement "l'expression n'est pas booléenne".



Pourquoi le code ne fonctionnerait-il pas ?

La seule chose est que l'opérande if n'est pas converti en bool, c'est ce dont le compilateur nous avertit, mais sinon tout est correct.

a,b,c, d'ailleurs, peuvent ne pas être initialisés du tout, puisqu'ils sont explicitement assignés dans le if.

3 assignez à a, assignez a à b, assignez b à c et ensuite vérifiez si c 'est vrai et ensuite écrivez Print().

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора - Документация по MQL5
 
sergey1294:

Je ne sais pas si c'est un bug ou si j'ai trouvé une astuce. Le code suivant fonctionne, mais donne un avertissement expression n'est pas booléenne


C'est probablement comme ça.

void OnStart()
{
//----------------------------------------------------------------------------//
//Work variables
int a=3;
int b=3;
int c=3;
//----------------------------------------------------------------------------//
  if(a&&b&&c==3)Alert("a=b=c=3");
  else Alert("Условие не верно");
//----------------------------------------------------------------------------//
}
 

Alors dis-moi comment écrire cette expression pour qu'elle ne jure pas.

void OnStart()
  {
//---
   int a=1;
   int b=2;
   int c=3;
//---   
   if(a<b<c)Alert("a<b<c");
   else Alert("Условие не верно");
//---
  }
 
sergey1294:

Alors dis-moi comment écrire cette expression pour qu'elle ne jure pas.


if(a<b&&b<c){Print("");}

Dans le premier post, vous faites des opérations d'affectation, l'affectation multiple en cascade est acceptable. Ici, vous essayez de faire une comparaison multiple.

SZ puisque vous avez deux résultats de comparaison dans votre sortie, ils devraient être séparés par && ou un autre opérateur booléen.

 
sergey1294:

Alors dis-moi comment écrire cette expression pour qu'elle ne jure pas.


Je suggère ce qui suit.

//----------------------------------------------------------------------------//
//Work variables
int a=1;
int b=2;
int c=3;
//----------------------------------------------------------------------------//
  if(a<b&&b<c)Alert("a<b<c");
  else Alert("Условие не верно");
//----------------------------------------------------------------------------//

Nikolay est en avance sur vous :)

Urain:

SZY puisque vous avez deux résultats de comparaison dans la sortie, ils doivent être séparés par && ou un autre opérateur booléen.

Dans ce cas, seul &&.