gpt4 book ai didi

c - 仅在 C 中的时间更改时更新显示的时间流逝

转载 作者:行者123 更新时间:2023-12-05 03:23:26 28 4
gpt4 key购买 nike

我想显示程序开始后经过的秒数:

  volatile time_t start_time = time(NULL);
volatile time_t target_seconds = 60*60*17;
volatile time_t time_passed = 0;
while(1)
{
time_passed = time(NULL)-start_time;
printf("\rTime elapsed=%lu/%lu(seconds)", time_passed, target_seconds);
}

输出:

Time elapsed=1/61200(second)

但无论 time_passed 的值是多少,它都会不断更新显示。

现在我只想在实际时间递增时更新经过的显示时间。所以我把程序改成了这样:

  volatile time_t start_time = time(NULL);
volatile time_t target_seconds = 60*60*17;
volatile time_t time_passed = 0;
while(1){
if ((time(NULL)-start_time) != time_passed)
{
time_passed = time(NULL)-start_time;
printf("\rTime elapsed=%lu/%lu(seconds)", time_passed, target_seconds);
}
}

现在什么都不显示了。任何人都可以解释为什么以及如何解决它。

最佳答案

您的代码没问题。

但是根据您的平台,输出缓冲区仅在打印 \n 时刷新。

因此您应该在 printf 之后添加 fflush(stdout);

    if ((time(NULL)-start_time) != time_passed)
{
time_passed = time(NULL)-start_time;
printf("\rTime elapsed=%lu/%lu(seconds)", time_passed, target_seconds);
fflush(stdout);
}

顺便说一句:如果你等待的时间足够长,你最终会看到一些输出,因为最终输出缓冲区将满,然后所有内容都会立即显示,当然这在这里没有多大意义。

您在第一个版本的代码中立即看到输出的原因是您正在连续打印,因此输出缓冲区很快就会满,并且会连续刷新,因此您会看到输出。

这里不需要 volatile 关键字,它绝对没有必要,但也没有坏处。

关于c - 仅在 C 中的时间更改时更新显示的时间流逝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72527816/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com