Получить каждое сотое значение в цикле - PullRequest
9 голосов
/ 25 января 2011

Есть ли способ сделать это чище и не использовать временное значение, как я это сделал здесь?


ОБНОВЛЕНИЕ В коде была логическая ошибка и не показывалось, что я делаю.Вот что я делаю:

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

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

ОБНОВЛЕНИЕ Финал

Вот как это исправлено после обратной связи, спасибо, ребята.

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

Ответы [ 3 ]

22 голосов
/ 25 января 2011
if (i % 100 == 0 && i != 0) { //YOUR CODE }

Модуль отлично подходит для таких проверок.

Подробнее о модуле - http://www.vias.org/cppcourse/chap04_01.html

ОБНОВЛЕНИЕ: я добавил && i != 0 для случая 0, истинного.

Если вы хотите использовать временное значение вместо жесткого кодирования100, то это будет решение:

if (i % tempvalue == 0 && i != 0) { //YOUR CODE }
5 голосов
/ 25 января 2011

Вы имеете в виду, что вы хотите, чтобы условие запускалось 100 раз в течение цикла, то есть на каждой 36-й итерации?(В исходном коде вы удваиваете значение tempvalue каждый раз, поэтому оно будет срабатывать только семь раз в течение цикла.)

Вы можете использовать оператор modulo для проверки этого.Это вызовет условие на последнем из каждого набора из 36 итераций:

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

   if(i % 36 == 35) {
      \\DoStuff
   }
}
1 голос
/ 25 января 2011
if( (i+1 % (tempvalue+1) == 0)
{
      //DoStuff

      //tempvaule = tempvalue + tempvalue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...