2011-01-25 16 views
7

C'è un modo per rendere questo più pulito e non utilizzare il valore temporaneo come ho fatto qui?Ottieni ogni centesimo valore in un ciclo


UPDATE il codice aveva un errore logico e non mostrava quello che sto facendo. Questo è quello che sto facendo:

var loopTempValue = noOfPackets/100; 
for(i=0; i < noOfPackets; i++) 
{ 
    \\DoStuff 

    if (i == loopTempValue) 
    { 
     loopTempValue = loopTempValue + (noOfPackets/100); 
     UploadBackGroundWorker.ReportProgress(pross); 
    } 
} 

aggiornamento finale

Questo è come i suoi fissato dopo le valutazioni, ragazzi THX.

if (i % (noOfPackets/100) == 0 && i != 0) 
{ 
    UploadBackGroundWorker.ReportProgress(pross); 
} 
+1

avete mai sentito parlare di = '' gli operatori? sostituiscono dichiarazioni come 'a = a b' con' a = b'. Ad esempio: 'a + = b',' a% = b', 'a * = 2' ... – shybovycha

+0

Per essere chiari, si desidera la sequenza 36, ​​72, 144, ... come nel proprio codice o 100.200 , 300 sequenza formano il titolo? –

+0

qual è il tuo requisito? – naveen

risposta

19
if (i % 100 == 0 && i != 0) { //YOUR CODE } 

Modulus è fantastico per i controlli di questo tipo.

Maggiori info su Modulo - http://www.vias.org/cppcourse/chap04_01.html

UPDATE: ho aggiunto && i != 0 per il caso 0 è vero.

Se si desidera utilizzare il tempvalue invece di difficile codifica 100, allora questa sarebbe una soluzione:

if (i % tempvalue == 0 && i != 0) { //YOUR CODE } 
+0

stai misurando il valore temporale (che è importante qui) –

+0

E questo è 'true' per' i == 0' pure. –

+0

@Casper: Beh, ha dichiarato: "C'è un modo per rendere questo più pulito e non utilizzare il valore temporale come ho fatto qui". Quindi ho pensato che non volesse usarlo affatto. – raRaRa

1
if((i+1 % (tempvalue+1) == 0) 
{ 
     //DoStuff 

     //tempvaule = tempvalue + tempvalue; 
} 
5

Vuoi dire che si desidera la condizione per essere attivato 100 volte durante il ciclo, vale a dire ogni 36 ° iterazione? (Nel codice originale raddoppi il valore temporaneo ogni volta, quindi si attiverebbe solo sette volte durante il ciclo.)

È possibile utilizzare l'operatore modulo per verificarlo. In tal modo, la condizione in occasione dell'ultima di ogni serie di 36 iterazioni:

for(i=0; i < 3600; i++) { 
    \\DoStuff 

    if(i % 36 == 35) { 
     \\DoStuff 
    } 
} 
+0

+1 per aver notato anche il bug! – fearofawhackplanet

+0

sì, per aver segnalato l'errore, penso di averne abbastanza quando scrivo l'esempio – Darkmage

+0

sì, voglio che si inneschi ogni 100 ° volta. – Darkmage

Problemi correlati