Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 条件为每x个循环只执行一次_C++_Math_Conditional Statements - Fatal编程技术网

C++ 条件为每x个循环只执行一次

C++ 条件为每x个循环只执行一次,c++,math,conditional-statements,C++,Math,Conditional Statements,我想不出来,也许有人能帮我。我有一个只有一个参数的函数,在这个函数中有一些代码,我想每隔x次运行一次 void doSomething(int _arg){ // do something every 250 times } 该函数被重复调用,但参数没有增加1。例如,函数调用可能是这样的,我希望函数中的条件每250次运行一次 doSomething(1); // do something doSomething(130); doSomething(230); doSomething(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(\u arg%250==0)
,因为
\u 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
,意味着操作必须发生两次

如果每次调用函数时它都必须继续执行操作以赶上下一个\u目标,则可以执行以下操作:

void doSomething(int _arg)
{
    static unsigned int next_target = 0;
    if (_arg >= next_target)
    {
        // do something special
        next_target += 250;
    }
}
void doSomething(int _arg)
{
    static unsigned int next_target = 0;
    while (_arg >= next_target)
    {
        // do something special
        next_target += 250;
    }
}
或者,如果它应该立即采取行动,直到赶上下一个目标,您可以这样做:

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

一个更好的方法是把这个包打包在一个类中,这样你就可以移除任何可能的线程问题吗?@ MarkB,告诉我,我知道很少的C++。-1。代码>\u arg>x不检查跳转250或更多!它应该是
\u arg>=(x+250)
@cnicutar:Yes。看问题。@Nawaz我不确定我是否理解,你能提供有问题的具体输入吗?