1

我有一个使用 difftime 的小型 C 程序。真的很奇怪,10秒后它不会打印出该行。

但是,如果我取消注释睡眠行,那么它可以工作。

任何想法为什么会发生这种情况?

/* difftime example */
#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */

int main ()
{
  time_t start, stop;

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);
                //sleep (1);
                if (diff >= 10) {
                        printf("10 seconds passed...");
                        start = time(NULL);
                }
        }
}

顺便说一句:代码编译得很好,我在 Raspberry Pi 上运行它。3.6.11+ #474 PREEMPT Thu Jun 13 17:14:42 BST 2013 armv6l GNU/Linux

4

3 回答 3

8

控制台 IO 可能是行缓冲的。尝试冲洗

printf("10 seconds passed...");
fflush(stdout)

或添加换行符\n

printf("10 seconds passed...\n");

sleep当调用未注释时,我无法重现行为的任何变化。

于 2013-08-28T15:22:38.440 回答
3
printf("10 seconds passed...\n");
于 2013-08-28T15:24:33.447 回答
0

对于 sleep(),您需要包含 unistd.h,并像其他人指出的那样添加换行符。

#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */
#include <unistd.h>     /* sleep() */

如果您的代码编译时没有警告并且没有包含 unistd.h,您需要提高警告。

于 2013-08-28T15:29:31.330 回答