为什么每次“for”迭代都会输出 4 次

  • 本文关键字:迭代 输出 for c++
  • 更新时间 :
  • 英文 :


我正在尝试制作一个基本的计时器,此代码似乎根据duration中的值正确打印出毫秒数

但是有人可以告诉我为什么它为每个"刻度"打印 4 次输出不管 duration 的值是多少,以及如何更正它,以便它只在duration中设置的每个"刻度"上输出一次?我敢肯定,这一定是我忽略的简单事情,但我仍在学习C++的基础知识,我看不到错误。

我在iOS"Mobile C"应用程序上运行它,但我不认为这是导致问题的原因。

#include <chrono>
#include <iostream>
int main()
{
    using namespace std::chrono;
    auto start = high_resolution_clock::now();
    int duration = 100;
    int i = 0;
    while (i <= 100)
    {
        auto now = high_resolution_clock::now();
        auto millis = duration_cast<milliseconds>(now - start).count();
        if (millis % duration == 0)
        {
            std::cout << "millis: " << millis << std::endl;
            i++;
        }
    }
}

由于我还是新手,所以我无法发表评论,但您获得该输出 4 次的原因是,如果语句在您的机器上为真 4 次,就像 Jesper Juhl 所说的那样。 请考虑使用 bool 来确保它只运行一次。 类似的东西

bool hasRun = false;
if (millis % duration == 0)
    {
        if (!hasRun)
        {
            std::cout << "millis: " << millis << std::endl;
            hasRun = true;
        }
    }
else
    hasRun = false;

然后,您将能够像您在评论中提到的那样保持无限的Arduino模拟循环,但每duration只能使语句为真一次。

最新更新