2011-01-25 15 views
7

¿Hay alguna manera de hacer este limpiador y no usar el tempvalue como lo he hecho aquí?Obtenga cada centésimo valor en un bucle


ACTUALIZAR el código tenía un error de lógica y no mostró lo que estoy haciendo. Esto es lo que estoy haciendo:

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

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

actualización final

Así es como sus fijos después de las votaciones, chicos THX.

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

¿alguna vez has oído hablar de '' = operadores? reemplazan declaraciones como 'a = a b' con' a = b'. Ejemplo: 'a + = b',' a% = b', 'a * = 2' ... – shybovycha

+0

Para ser claros, quiere la secuencia 36, ​​72, 144, ... como en su código o th 100,200 , 300 secuencia del título? –

+0

¿cuál es su requisito? – naveen

Respuesta

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

módulo es fantástica para los controles de este tipo.

Más sobre el módulo - http://www.vias.org/cppcourse/chap04_01.html

ACTUALIZACIÓN: He añadido && i != 0 0 para el caso de ser cierto.

Si desea utilizar el tempvalue en vez del disco de codificación 100, entonces esto sería una solución:

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

estás perdiendo el valor de tempvalue (que es importante aquí) –

+0

Y esto es 'verdadero' para 'i == 0' también. –

+0

@Casper: Bueno, dijo: "¿Hay alguna manera de hacer esto más limpio y no usar el tempvalue como lo hice aquí?". Así que asumí que no quería usarlo en absoluto. – raRaRa

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

     //tempvaule = tempvalue + tempvalue; 
} 
5

¿Quiere decir que desea que la condición de que se active 100 veces durante el bucle, es decir, cada 36ª iteración? (En su código original duplica el valor del tempvalue cada vez, por lo que solo se activaría siete veces durante el ciclo).

Puede usar el operador de módulo para verificarlo. Esto hará que la condición en el último de cada conjunto de 36 iteraciones:

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

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

+1 para también notar el error! – fearofawhackplanet

+0

sí, sí, para señalar el error, creo que es suficiente al escribir la muestra – Darkmage

+0

, sí, quiero que se dispare cada centésima vez. – Darkmage

Cuestiones relacionadas