Erreurs, bugs, questions - page 326

 
Urain:

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.


Je sais comment comparer, mais if(a<b<c) cela fonctionne et semble plus joli bien que l'aide ne dise rien à ce sujet. comment cela fonctionne-t-il plus vite ?
 
sergey1294:
Je sais comment comparer, mais si(a<b<c) ça marche et c'est plus joli, bien que l'aide ne dise rien à ce sujet. Mais comment ça marche plus vite ?

Votre expression est égale à celle-ci

if(a<(b<c))
vous comparez b et c, le résultat de cette comparaison sera 0 ou 1 et ensuite vous comparez ce résultat avec a.
 
sergey1294:
Je sais comment comparer, mais si(a<b<c) ça marche et c'est plus joli, même si l'aide ne dit rien à ce sujet. Comment ça marche plus vite ?

Voici comment cela fonctionne.

if(a&&b&&c==3)Alert("a=b=c=3");
if(a<b&&b<c)Alert("a<b<c");
  if(a==b)Alert("a=b");

et ce n'est pas le cas.

 if(a<b<c)Alert("a<b<c");
 if(a=b=c=3)Alert("a=b=c=3");
 if(a==b==c==3)Alert("a=b=c=3");
 if(a==b==c)Alert("a=b=c"); //Вот нежелание работать этого примера для меня странно (хотя может так и задумано)
Urain:

Votre expression équivaut à ceci

vous comparez b et c, le résultat de cette comparaison sera 0 ou 1 ; vous comparez ensuite ce résultat avec a.
Avec cette logique, tout devient clair, mais pour une raison quelconque, je pense que a et b seront comparés en premier (je peux me tromper bien sûr)...
 
Urain:

Votre expression est la même que celle de celui-ci.

vous comparez b et c, le résultat de cette comparaison est 0 ou 1 et ensuite vous comparez ce résultat avec a.

Je vois, mais voici l'astuce avec cette expression, mais ça ne marche pas.

void OnStart()
  {
//---
   int a=1;
   int b=2;
   int c=3;
   int d=3;
//---   
   if(a!=b<c==d)Alert("");
   else Alert("Условие не верно");
//---
  }
 
Interesting:
... Seulement, je pense d'une certaine manière que a et b seront comparés en premier (je peux me tromper bien sûr)...
Oui, je me trompe juste mécaniquement, il y a d'abord une comparaison à gauche, puis à droite.
 
sergey1294:

Je vois, mais voici l'astuce avec cette expression, mais ça ne marche pas.

Non, c'est juste qu'il faut prendre en compte les priorités des opérations et le commentaire d'Urain.

Il n'y a pas de problème avec cette expression aussi, mais elle fonctionne très mal.

if(a<b<c)Alert("a<b<c");

Cette question est décrite en détail dans l'édition, section "Priorités et ordre des opérations". (La priorité et l'ordre des opérations doivent être pris en compte).

Donc, si je comprends bien, la comparaison selon le compilateur ressemble à ceci (en tenant compte des commentaires de Nikolaï)

if((a!=(b<c))==d)Alert("")
 
Interesting:
Quelle est la taille approximative de la liste ? Peut-être y a-t-il une limite à la taille de la liste...
Exactement 100 lignes.
 
-Alexey-:
Exactement 100 lignes.

J'ai expérimenté avec l'une de mes bibliothèques (110 fonctions), affichant 100 à 106 dans la liste (et un nombre différent tout le temps, mais pas 110).

 

Lors de la lecture du fichier .csv, plusieurs problèmes sont apparus en même temps. Afin d'essayer de comprendre les raisons de ce dysfonctionnement, j'ai écrit un script simple. Le script lit les données du fichier "test.csv". Dès qu'il arrive à la fin du fichier, il imprime le numéro d'itération de la boucle "for", la taille du fichier et la position du pointeur de fichier dans le journal. Mais des choses incompréhensibles se produisent ici, à savoir : Le fichier "test.csv" ne comporte que 15 lignes, donc le nombre d'itération de la boucle "for" doit être de 14, mais le journal génère 0. La taille du fichier est imprimée correctement, mais la position du pointeur de fin de fichier a une taille plus grande que le fichier lui-même pour une raison quelconque. Code de script :

void OnStart()
  {
   int handle;
   ulong i, size;
   double _Ask, _Bid;
   string str;
      
   handle = FileOpen("test.csv",FILE_CSV|FILE_READ,',');
   
   if (handle != INVALID_HANDLE)
     {
      size = FileSize(handle);
      
      for (i = 0; i < size; i++)
        {
         str = FileReadString(handle);
         _Ask = FileReadNumber(handle);
         _Bid = FileReadNumber(handle);
        
         if (FileIsEnding(handle))
           {
            Print(i," ",size," ",FileTell(handle));
            break;
           }
        }
     }   
      
   FileClose(handle);

   return;
  }

Fichier "test.csv" et journal joint. Qui a une idée sur cette question ?

P.S. La chose la plus intéressante est que dans MT4 ce script fonctionne sans erreurs.

Dossiers :
test.zip  1 kb
 
DenisR:

Lors de la lecture du fichier .csv, plusieurs problèmes sont apparus en même temps. Afin d'essayer de comprendre les raisons de ce dysfonctionnement, j'ai écrit un script simple. Le script lit les données du fichier "test.csv". Dès qu'il arrive à la fin du fichier, il imprime le numéro d'itération de la boucle "for", la taille du fichier et la position du pointeur de fichier dans le journal. Mais des choses incompréhensibles se produisent ici, à savoir : Le fichier "test.csv" ne comporte que 15 lignes, donc le nombre d'itération de la boucle "for" doit être de 14, mais le journal génère 0. La taille du fichier est imprimée correctement, mais la position du pointeur de fin de fichier a une taille plus grande que le fichier lui-même pour une raison quelconque. Code de script :

Fichier "test.csv" et journal joint. Qui a une idée sur cette question ?

P.S. La chose la plus intéressante est que dans MT4 ce script fonctionne sans erreurs.

En un coup d'œil, le fichier entier est écrit en str...
Ajouter le drapeau FILE_ANSI, car il lit l'unicode par défaut :)
Aussi, je serai 15, car il y a une ligne blanche à la fin.