为什么每次'for'迭代输出4次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么每次'for'迭代输出4次相关的知识,希望对你有一定的参考价值。

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

但有人可以告诉我为什么它为每个'tick'打印输出4次,无论duration的值是什么,以及如何纠正它以便它只在duration中设置的每个'tick'输出一次?我敢肯定它一定是简单的我忽略了但我还在学习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只有声明响一次。

以上是关于为什么每次'for'迭代输出4次的主要内容,如果未能解决你的问题,请参考以下文章

如何在Vue的v-for迭代中只调用一次方法?

如何将每次迭代的输出保存到结构中

[Python] 迭代器是什么?你每天在用的for循环都依赖它!

python 用for循环输入数字1-7判断输出相应星期几?

what's the python之可迭代对象迭代器与生成器(附面试题)

保存在 txt (c++) 中调用 for 循环的函数的输出