Errori, bug, domande - pagina 326

 
Urain:

Nel primo post stai facendo operazioni di assegnazione, l'assegnazione multipla a cascata è accettabile. Qui si sta cercando di fare un confronto multiplo.


So come confrontare, ma if(a<b<c) funziona e sembra più bello anche se l'aiuto non dice nulla a riguardo. come funziona più velocemente?
 
sergey1294:
So come confrontare, ma if(a<b<c) funziona e sembra più carino, anche se l'aiuto non dice nulla a riguardo. Ma come funziona più velocemente?

La tua espressione è uguale a questa

if(a<(b<c))
si confronta b e c, il risultato di questo confronto sarà 0 o 1 e poi si confronta questo risultato con a.
 
sergey1294:
So come confrontare, ma if(a<b<c) funziona e sembra più bello, anche se l'aiuto non dice nulla al riguardo. Come funziona più velocemente?

Ecco come funziona.

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");

e questo no.

 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:

La tua espressione è uguale a questa

si confronta b e c, il risultato di questo confronto sarà 0 o 1 dopo di che si confronta questo risultato con a.
Con questa logica tutto diventa chiaro, ma per qualche ragione penso che a e b saranno confrontati per primi (potrei sbagliarmi, naturalmente)...
 
Urain:

La tua espressione è la stessa di questa.

si confronta b e c, il risultato di questo confronto è 0 o 1 e poi si confronta questo risultato con a.

Capisco, ma ecco il trucco con questa espressione, ma non funziona

void OnStart()
  {
//---
   int a=1;
   int b=2;
   int c=3;
   int d=3;
//---   
   if(a!=b<c==d)Alert("");
   else Alert("Условие не верно");
//---
  }
 
Interesting:
... Solo che in qualche modo penso che a e b saranno confrontati per primi (potrei sbagliarmi, ovviamente)...
Sì, ho solo sbagliato meccanicamente, prima c'è un confronto a sinistra, poi uno a destra.
 
sergey1294:

Capisco, ma ecco il trucco con questa espressione, ma non funziona

No, è solo che bisogna tener conto delle priorità delle operazioni e del commento di Urain.

Non c'è nessun problema anche con questa espressione, ma fa dei glitch molto brutti.

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

Questo problema è descritto in dettaglio nella modifica, sezione "Priorità e ordine delle operazioni". (Si deve tener conto della priorità e dell'ordine delle operazioni).

Quindi, se ho capito bene, il confronto secondo il compilatore si presenta così (tenendo conto dei commenti di Nikolai)

if((a!=(b<c))==d)Alert("")
 
Interesting:
Qual è la dimensione approssimativa della lista? Forse c'è un limite alla dimensione della lista...
Esattamente 100 linee.
 
-Alexey-:
Esattamente 100 linee.

Sperimentato con una delle mie librerie (110 funzioni), ha visualizzato da 100 a 106 nella lista (e un numero sempre diverso, ma non 110).

 

Durante la lettura del file .csv, sono sorti diversi problemi contemporaneamente. Per cercare di capire le ragioni del malfunzionamento, ho scritto un semplice script. Lo script legge i dati dal file "test.csv". Non appena arriva alla fine del file, stampa il numero di iterazione del ciclo "for", la dimensione del file e la posizione del puntatore del file nel log. Ma qui succedono cose incomprensibili, cioè: il file "test.csv" ha solo 15 righe, quindi il numero di iterazioni del ciclo "for" deve essere 14, ma il giornale genera 0. La dimensione del file viene stampata correttamente, ma la posizione del puntatore alla fine del file ha una dimensione maggiore del file stesso per qualche motivo. Codice 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;
  }

file "test.csv" e log allegati. Chi ha qualche idea su questa domanda?

P.S. La cosa più interessante è che in MT4 questo script funziona senza errori.

File:
test.zip  1 kb
 
DenisR:

Durante la lettura del file .csv, sono sorti diversi problemi contemporaneamente. Per cercare di capire le ragioni del malfunzionamento, ho scritto un semplice script. Lo script legge i dati dal file "test.csv". Non appena arriva alla fine del file, stampa il numero di iterazione del ciclo "for", la dimensione del file e la posizione del puntatore del file nel log. Ma qui succedono cose incomprensibili, cioè: il file "test.csv" ha solo 15 righe, quindi il numero di iterazioni del ciclo "for" deve essere 14, ma il giornale genera 0. La dimensione del file viene stampata correttamente, ma la posizione del puntatore alla fine del file ha una dimensione maggiore del file stesso per qualche motivo. Codice script:

file "test.csv" e log allegati. Chi ha qualche idea su questa domanda?

P.S. La cosa più interessante è che in MT4 questo script funziona senza errori.

A colpo d'occhio, l'intero file viene scritto su str...
Aggiungere il flag FILE_ANSI, dato che legge unicode di default:)
Inoltre, avrò 15 anni, dato che c'è una riga vuota alla fine.
Motivazione: