1

我正在尝试根据时间创建一个循环函数。迭代后,它将每 60 秒打印一次“60 秒过去”。但是这段代码导致我“通过了 60 秒”,而实际上我的手表甚至还没有显示 1 分钟。我在下面尝试过,但我希望它会向我显示这些信息,但它没有(只有第一对迭代行数。之后不是..)

任何人都可以在这件事上提供帮助吗?谢谢

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

int main()
{
time_t start,stop;
start = time(NULL);
time(&start);
int iteration, i;
    for (iteration = 1; iteration <= 500; iteration++) {
            for (i = 0; i <= 50; i++) {
                     printf("looping while waiting 60 second..\n");

             }
            stop = time(NULL);
            int diff = difftime(start, stop);
            if (diff % 60 == 0) {
                     printf("60 second passed..");}
            }

    return 1;
}
4

2 回答 2

3

difftime甚至在一秒钟过去之前,以下代码可能会被执行多次。结果,difftime将返回一个 < 1 的值,该值被您的隐式强制转换截断为 0。当然0 % 60 == 0

编辑:

你可能会考虑这样的事情:

start = time(NULL);
for(; /* some condition that takes forever to meet */;) {
    // do stuff that apparently takes forever.
    stop = time(NULL);
    double diff = difftime(stop, start);
    if (diff >= 60) {
        printf("60 seconds passed...");
        start = time(NULL);
    }
}

另请注意,在您的示例代码中,start应该stop在调用difftime.

于 2012-04-04T17:02:23.973 回答
2

difftime 很可能等于 0。如果你想等待 60 秒,你应该考虑使用函数:

  • usleep在 Linux 上
  • sleep在窗户上
于 2012-04-04T17:09:06.797 回答