如何以 1 秒的间隔打印 C 中的值?

How can I print values in C at intervals of 1 sec?

我正在尝试构建一个交通灯模拟器,它要求我以 1 秒的间隔在前 8 秒打印 green,在接下来的 4 秒以 1 秒的间隔打印 yellow,并且 red 最后 8 秒,间隔 1 秒。我如何使用 time.h 在 C 中实现它?

这是我的尝试,但我只得到一个以不超过 1 秒的间隔不间断地打印 green 的输出。

// Traffic light simul`ator

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t start, end;
    double elapsed;
    time(&start);  /* start the timer */
    do {
        time(&end);
        elapsed = difftime(end, start);
        if (elapsed )
        {
            printf("green");
        }
    } while(elapsed < 9);
}   

您的代码将尽可能快地打印 "green",因为 if(elapsed) 将始终发生,因为条件始终为 True。您可以使用 difftime 但需要重新编写您的代码(我认为它可能会添加 2-3 行)。有什么理由不能只使用 sleep 吗?这似乎是一个更简单的解决方案:打印 "green",调用 sleep(1),再重复 7 次,继续打印 "yellow",等等。希望这对您有所帮助!

编辑:只要值 elapsed 不等于 0,if(elapsed) 就是 True,只是因为计算机不会立即行动,所以总会返回一个非零时差通过 difftime.

以下似乎按预期工作:

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t start, end;
    double elapsed, prev_elapsed = 0.0;
    time(&start);  /* start the timer */
    do
    {
        time(&end);
        elapsed = difftime(end, start);
        if (elapsed >= prev_elapsed+1.0)
        {
            printf("green\n");
            prev_elapsed = elapsed;
        }
    } while(elapsed < 9.0);
}

这里我们跟踪 'current' 经过的时间,以及记录前一秒刻度的时间。当这个 'current' 流逝与 "previous" 流逝不同时,我们知道已经过去了一秒(或者更可能的是,稍微多一点),然后我们打印 "green".

好的,所以我明白这是怎么回事了。

difftime()returnsdouble。这意味着可以返回小数秒。如果它们是(它们可能会是),那么这意味着您在 elapsed 中有一些值,这意味着它不会评估为 false——即使 1 整秒还没有过去。

如果你想让elapsed大于1,那么就检查一下:

if (elapsed >= 1)
{
    printf("green");
}

这应该可以解决问题。