Döngüler ve Emirleri Kapatma veya Silme - sayfa 2

 

OrderSelect siparişi seçemezse ne olur?
OrderMagicNumber==MagicNo koşulu asla doğru olmaz. Bu nedenle OrderSelect'in sonucunu kontrol etmeye ve yanlışsa devam etmeye gerek yok.

döngü değişkenini azaltmak için OrderSelect'i kontrol etmek istiyorsanız daha iyidir. Misal:

 for (PositionIndex = 0 ; PositionIndex < OrdersTotal () ; PositionIndex ++)  
   {
   if ( ! OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) ) { PositionIndex--; continue ; }
 
  1. orderSelect başarısız olursa, son seçilen emrin sihirli numarasını veya bellekte kalan bir şeyi alabilirsiniz ve bu eşleşebilir. Her zaman kontrol edin.
  2. HER ZAMAN geri saymalısınız. Tahminen, siz konum 3'te çalışırken konum 0 kapalı. Çalışmak istediğiniz sonraki sıra 4. konumdu, ancak döngü yaptığınızda ve positionIndex'i 4'e yükselttiğinizde konum 3'te olacak. Şimdi birini kaçırdınız. Geri sayım yaparak aynı siparişi ikinci kez işleyebilirsiniz ancak hiçbirini kaçırmazsınız.
 
WHRoeder :
  1. OrderSelect başarısız olursa, son seçilen emrin sihirli numarasını veya bellekte kalan bir şeyi alabilirsiniz ve bu eşleşebilir. Her zaman kontrol edin.
  2. HER ZAMAN geri saymalısınız. Tahminen, siz konum 3'te çalışırken konum 0 kapalı. Çalışmak istediğiniz sonraki sıra 4. konumdu, ancak döngü yaptığınızda ve positionIndex'i 4'e yükselttiğinizde konum 3'te olacak. Şimdi birini kaçırdınız. Geri sayım yaparak aynı siparişi ikinci kez işleyebilirsiniz ancak hiçbirini kaçırmazsınız.

1- Bunu sana kim söyledi? Ve hangi hafızadan bahsediyorsun?


2- Geri veya yukarı saymaktan bahsetmedim. sağlanan kodun kendisi geri sayım yapmıyor.

 
  1. OrderMagicNumber() ve diğerleri DAİMA bir şeyler döndürür. OrderSelect() başarısız olursa, rastgele çöp, arta kalanlar, belki önceki başarılı seçimden, belki son kapatılan siparişin değeri için, belki de bir kayıtta ne varsa alırsınız. Hiç silinmiş bir nesne üzerinde bir işaretçinin başvurusunu kaldırmayı denediniz mi? Bellek, devre kartındaki küçük siyah çip. Bunu dene
     int start(){     Print (Whatever()); }
    double Whatever(){
       for (i= 0 ; i< 10 ; i++) double tmp=Close[i];
       // no value returned
    }
    ve bazı çıktılar gönderin.
  2. "Sağlanan kodun geri sayım yapmadığını" biliyorum. İşte sorun bu. Her zaman geri sayım! Azaltmanız ÇALIŞMAYACAKTIR ve potansiyel bir sonsuz döngüdür.
     if ( ! OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) ) { PositionIndex--; continue ; }

 

Kodlamanızın özel bir nedeni var mı:

 if ( ! OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue ;

yerine (?)

 if ( OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) )
{
   // statements if true
}

Bazı kodlama standartlarına göre hayır-hayır olarak kabul edildiğini biliyorum. Daha iyi bir performans mı veriyor yoksa sadece tercih mi?

 
burgie :

Kodlamanızın özel bir nedeni var mı:

yerine (?)

Bazı kodlama standartlarına göre hayır-hayır olarak kabul edildiğini biliyorum. Daha iyi bir performans mı veriyor yoksa sadece tercih mi?

Hatırlamamın özel bir nedeni yok. . . Yapılması gereken mantıklı şeyin ne olduğunu gerçekten bilmiyorum, neden OrderSelect() hiç başarısız olsun? ve başarısız olursa ne yapılmalı?
 
burgie :

Kodlamanızın özel bir nedeni var mı:

yerine (?)

Bazı kodlama standartlarına göre hayır-hayır olarak kabul edildiğini biliyorum. Daha iyi bir performans mı veriyor yoksa sadece tercih mi?


Bir döngü içinde, bu tamamen aynıdır, tercih ettiğinizi seçin.
 
burgie :

Kodlamanızın özel bir nedeni var mı:

yerine (?)

Bazı kodlama standartlarına göre hayır-hayır olarak kabul edildiğini biliyorum. Daha iyi bir performans mı veriyor yoksa sadece tercih mi?

 

if(orderselect(......)) bunu yürütün //---geri dönüş yok

if(!orderselect(.......))devam et //geri dön ve kontrol et

 
MirTD :

if(orderselect(......)) bunu yürütün //---geri dönüş yok

if(!orderselect(.......))devam et //geri dön ve kontrol et

Kodlamamla ilgili bana sorulan soruyu zaten yanıtladım. . .