错误、漏洞、问题 - 页 326

 
Urain:

在第一个帖子中,你正在进行赋值操作,多个级联赋值是可以接受的。在这里,你正试图做一个多重比较。


我知道如何进行比较,但如果(a<b<c)它可以工作,而且看起来更漂亮,尽管帮助中没有说什么。它是如何更快地工作的?
 
sergey1294:
我知道如何进行比较,但如果(a<b<c)它可以工作,而且看起来更漂亮,虽然帮助中没有提到。 但它如何更快工作?

你的表达方式等同于这个

if(a<(b<c))
你比较b和c,这个比较的结果将是0或1,然后你将这个结果与a比较。
 
sergey1294:
我知道如何进行比较,但如果(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比较。
有了这个逻辑,一切都变得清晰了,但由于某些原因,我认为a和b会先被比较(当然可能是我错了)...
 
Urain:

你的表情和这个人一样。

你比较b和c,这个比较的结果是0或1,然后你把这个结果与a比较。

我明白了,但这个表达方式的诀窍是这样的,但它并不奏效

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

这个问题在编辑部"优先级和操作顺序 " 一节中有详细描述。(必须考虑到操作的优先级和顺序)。

因此,如果我理解正确的话,根据编译器的比较看起来是这样的(考虑到Nikolay的评论)。

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标志,因为它默认读取的是unicode:)
另外,我将是15岁,因为最后有一个空行。