3

私はこれを理解できないので、誰かが私を助けることができるかもしれません。1 つの引数を持つ関数があり、その関数内に 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
    }
}

これは、10thenを受け取る1002ということは、アクションが 2 回行われる必要があることを意味します。

に追いつくために関数が呼び出されるたびにアクションを実行し続ける必要がある場合は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 に答える