条件是每x个循环只做一次

condition to do something only once every x number of loops

本文关键字:一次 循环 条件      更新时间:2023-10-16

我想不通,所以这里可能有人可以帮我。我有一个带有一个参数的函数,在这个函数中有我想每x次运行的代码。

void doSomething(int _arg){
    // do something every 250 times
}

函数被反复调用,但参数没有增加1。例如,函数调用可能是这样的,我希望函数中的一个条件每250次运行一次。

doSomething(1); // do something
doSomething(130);
doSomething(230);
doSomething(310); // 250 was passed, do something
doSomething(420);
doSomething(570); // 2*250 was passed, do something

我不能只做if(_arg % 250 == 0)这样的事情,因为_arg的值是不规则的(但间隔总是小于250)。

静态变量:怎么样

void doSomething(int _arg){
    static int x = 0;
    if (_arg > x) {
        x += 250;  //update x to be crossed next time
        // do something
    }
}

您可以使用一个额外的变量,比如全局或静态:

void doSomething(int _arg)
{
    static unsigned int next_target = 0;
    if (_arg >= next_target)
    {
        // do something special
        next_target = _arg - _arg % 250 + 250;  // set next_target to smallest
                                                // multiple of 250 above _arg
    }
}

这假设接收10然后接收1002,意味着动作必须发生两次。

如果每次调用函数以赶上next_target时它都必须继续执行操作,则可以执行以下操作:

void doSomething(int _arg)
{
    static unsigned int next_target = 0;
    if (_arg >= next_target)
    {
        // do something special
        next_target += 250;
    }
}

或者,如果它应该立即采取行动,直到赶上next_target,你可以这样做:

void doSomething(int _arg)
{
    static unsigned int next_target = 0;
    while (_arg >= next_target)
    {
        // do something special
        next_target += 250;
    }
}