3

我无法弄清楚,所以也许这里有人可以帮助我。我有一个带有一个参数的函数,并且在该函数内部有我想每 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)。

4

2 回答 2

9

静态变量怎么样:

void doSomething(int _arg){
    static int x = 0;

    if (_arg > x) {
        x += 250;  //update x to be crossed next time
        // do something
    }
}
于 2012-08-20T18:58:42.080 回答
1

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

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

这假设接收10then1002意味着该动作必须发生 خدمغ 两次。

如果每次调用函数以赶上时它必须继续执行操作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;
    }
}
于 2012-08-20T19:01:51.757 回答