如何以 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");
}
这应该可以解决问题。
我正在尝试构建一个交通灯模拟器,它要求我以 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");
}
这应该可以解决问题。