오류, 버그, 질문 - 페이지 326

 
Urain :

할당 작업을 수행하는 첫 번째 게시물에서 다중 계단식 할당이 허용됩니다. 여기에서 다중 비교를 시도하고 있습니다.


그래서 비교할 수 있지만 도움이 그것에 대해 아무 말도하지 않는 것처럼 보이지만 if(a<b<c) 작동하고 더 예쁘게 보입니다. 어떻게 더 빨리 작동합니까?
 
sergey1294 :
그래서 비교할 수 있지만 도움이 그것에 대해 아무 말도하지 않는 것처럼 보이지만 if(a<b<c) 작동하고 더 예쁘게 보입니다. 어떻게 더 빨리 작동합니까?

당신의 표현은 이것과 같습니다

 if (a<(b<c))
b와 c를 비교하면 이 비교의 결과는 0 또는 1이 되고 그 후에 이 결과를 a와 비교합니다.
 
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 " ); //Вот нежелание работать этого примера для меня странно (хотя может так и задумано)
우크라이나 :

당신의 표현은 이것과 같습니다

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

이 문제는 개정판 의 "작업 우선 순위 및 순서" 섹션에서 자세히 설명합니다(실행 우선 순위와 순서를 고려해야 함).

따라서 모든 것을 올바르게 이해하면 컴파일러에 따라 비교가 다음과 같이 보입니다(Nikolai의 의견 고려)

 if ((a!=(b<c))==d) Alert ( "" )
 
Interesting :
그리고 적어도 목록의 대략적인 크기는 무엇입니까? 목록의 크기에 제한이있을 수 있습니다 ...
정확히 100줄.
 
-Alexey- :
정확히 100줄.

나는 100에서 106까지(항상 다른 숫자이지만 110은 아님) 목록에 표시된 라이브러리(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" 파일 및 로그 첨부. 누가 이 문제에 대해 어떤 생각이 있습니까?

추신 가장 흥미로운 점은 이 스크립트가 MT4에서 오류 없이 작동한다는 것입니다.

파일:
test.zip  1 kb
 
DenisR :

.csv 파일을 읽을 때 한 번에 여러 문제가 발생했습니다. 잘못된 연산의 원인을 알아보기 위해 간단한 스크립트를 작성했습니다. 스크립트는 "test.csv" 파일에서 데이터를 읽습니다. 파일 끝에 도달하자마자 "for" 루프의 반복 횟수, 파일 크기, 로그에 대한 파일 포인터 위치를 인쇄합니다. 그러나 여기서 이상한 일이 발생합니다. 즉, "test.csv" 파일에 15줄만 있으므로 "for" 루프의 반복 횟수는 14여야 하지만 로그에는 0이 인쇄됩니다. 파일 크기가 올바르게 인쇄됩니다. 그러나 어떤 이유로 파일 끝 포인터의 위치는 파일 자체의 크기보다 큽니다. 스크립트 코드:

"test.csv" 파일 및 로그 첨부. 누가 이 문제에 대해 어떤 생각이 있습니까?

추신 가장 흥미로운 점은 이 스크립트가 MT4에서 오류 없이 작동한다는 것입니다.

반면에 전체 파일은 str ...
FILE_ANSI 플래그를 다음과 같이 추가하십시오. 기본적으로 유니코드를 읽습니다 :)
그럼에도 불구하고 나는 15살이 될 것입니다. 왜냐하면 끝에 빈 줄이 있습니다.