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 
    } 
}