2011-01-25 72 views
7

有没有办法让这个更清洁,而不是像我在这里所做的那样使用临时值?在循环中获取每100个值


更新代码有一个逻辑错误,并没有显示我在做什么。 这是我在做什么:

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

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

UPDATE最终

这是怎么了固定后的反馈,THX的家伙。

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

你有没有听说过' =`运算符?他们用`a = b`来代替`a = a b`这样的陈述。例如:`a + = b`,`a%= b`,`a * = 2` ... – shybovycha 2011-01-25 11:07:57

+0

要清楚,您需要36,72,144,...序列与您的代码或第100,200 ,300个序列形式的标题? – 2011-01-25 11:13:00

+0

你的要求是什么?更新代码 – naveen 2011-01-25 11:14:24

回答

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

模量是梦幻般的像这样的检查。

更多关于模 - http://www.vias.org/cppcourse/chap04_01.html

更新:我添加&& i != 0为0的情况是真实的。

如果你想使用tempvalue而不是硬编码100,那么这将是一个解决方案:

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

     //tempvaule = tempvalue + tempvalue; 
} 
5

你的意思是你想要的条件,在循环过程被触发100次,即每36次迭代? (在您的原始代码中,您每次都将tempvalue加倍,因此在循环过程中它只会触发七次。)

您可以使用模运算符来检查这一点。这将触发在每组36次迭代的最后一次的情况:

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

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