【问题标题】:condition to do something only once every x number of loops条件是每 x 次循环只做一次
【发布时间】:2012-08-16 02:57:40
【问题描述】:

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

【问题讨论】:

    标签: c++ math conditional-statements


    【解决方案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
        }
    }
    

    这假设接收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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      静态变量怎么样:

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

      【讨论】:

      • 更好的方法是将其包装在一个类中,以便消除任何可能的线程问题?
      • @MarkB 你告诉我,我对 C++ 知之甚少。
      • -1。 _arg > x 不检查 250 或更多的跳跃!它应该是_arg >= (x + 250)
      • @cnicutar:是的。查看问题。
      • @Nawaz 我不确定我是否理解,您能否提供有问题的具体输入?
      猜你喜欢
      • 2017-06-03
      • 2021-09-03
      • 1970-01-01
      • 2020-07-22
      • 2015-09-28
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多