Ошибки, баги, вопросы - страница 326

 
Urain:

в первом посте вы делаете операции присвоения, множественное каскадное присвоение допустимо. Тут же вы пытаетесь делать множественное сравнение.


так я умею сравнивать, но if(a<b<c) оно работает и красивее выглядит хотя в справке вроде про это ни чего не сказано. а как быстрее работает?
 
sergey1294:
так я умею сравнивать, но if(a<b<c) оно работает и красивее выглядит хотя в справке вроде про это ни чего не сказано. а как быстрее работает?

Ваше выражение равносильно вот этому

if(a<(b<c))
вы сравниваете b и c, результатом этого сравнения будет 0 или 1 после чего вы этот результат сравниваете с а.
 
sergey1294:
так я умею сравнивать, но if(a<b<c) оно работает и красивее выглядит хотя в справке вроде про это ни чего не сказано. а как быстрее работает?

Вот так работает

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

а так нет

 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:

Ваше выражение равносильно вот этому

вы сравниваете b и c, результатом этого сравнения будет 0 или 1 после чего вы этот результат сравниваете с а.
При такой логике все становится понятным, только я почему-то думаю что сначала сравнятся a и b (может не прав конечно)...
 
Urain:

Ваше выражение равносильно вот этому

вы сравниваете b и c, результатом этого сравнения будет 0 или 1 после чего вы этот результат сравниваете с а.

Ясно, но вот прикол на вот это выражение не ругается но оно не работает

void OnStart()
  {
//---
   int a=1;
   int b=2;
   int c=3;
   int d=3;
//---   
   if(a!=b<c==d)Alert("");
   else Alert("Условие не верно");
//---
  }
 
Interesting:
... только я почему-то думаю что сначала сравнятся a и b (может не прав конечно)...
Да я чисто механически ошибся, с начало происходит левое сравнение потом правое.
 
sergey1294:

Ясно, но вот прикол на вот это выражение не ругается но оно не работает

Нет тут прикола, просто учитывать нужно приоритеты операций и замечание от Urain.

На это вырожение тоже не ругается, однако оно глючит по страшному

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

Подробно данный вопрос описан с правке, раздел "Приоритеты и порядок операций" (нужно учитывать приоритет и порядок выполнения).

таим образом если я все правильно понял сравнение по мнению компилятора выглядит примерно так (с учетом замечаний от Николая)

if((a!=(b<c))==d)Alert("")
 
Interesting:
А хотя бы приблизительный размер списка какой? Может по размеру списка ограничение есть...
Ровно 100 строк.
 
-Alexey-:
Ровно 100 строк.

Поэкспериментировал с одной из своих библиотек (110 функций), отображаются в списке от 100 до 106 (причем все время разное число, но не 110).

 

При чтении .csv файла возникло сразу несколько проблем. С целью попытки выяснения причин неправильной работы написал простенький скрипт. Скрипт читает данные из файла "test.csv". Как только доходит до конца файла, печатает в журнал номер итерации цикла "for", размер файла и позицию файлового указателя. Но тут происходят непонятные вещи, а именно: в файле "test.csv" всего 15 строк, поэтому номер итерации цикла "for" должен быть 14, но в журнале печатается 0. Размер файла печатается правильно, но позиция файлового указателя конца файла почему-то имеет размер больше, чем размер самого файла. Код скрипта:

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;
  }

Файл "test.csv" и журнал во вложении. У кого какие мысли по данному вопросу? 

P.S. Самое интересное, что в MT4 этот скрипт работает без ошибок. 

Файлы:
test.zip  1 kb
 
DenisR:

При чтении .csv файла возникло сразу несколько проблем. С целью попытки выяснения причин неправильной работы написал простенький скрипт. Скрипт читает данные из файла "test.csv". Как только доходит до конца файла, печатает в журнал номер итерации цикла "for", размер файла и позицию файлового указателя. Но тут происходят непонятные вещи, а именно: в файле "test.csv" всего 15 строк, поэтому номер итерации цикла "for" должен быть 14, но в журнале печатается 0. Размер файла печатается правильно, но позиция файлового указателя конца файла почему-то имеет размер больше, чем размер самого файла. Код скрипта:

Файл "test.csv" и журнал во вложении. У кого какие мысли по данному вопросу? 

P.S. Самое интересное, что в MT4 этот скрипт работает без ошибок. 

 

Навскидку, в str записывается весь файл...
Добавьте флаг FILE_ANSI , т.к. по умолчанию читает юникод:)
И еще, i будет 15, т.к. там есть пустая строка в конце.
Причина обращения: