为什么这个小C程序没有像预期的那样工作?

时间:2013-08-28 15:21:33

标签: c

我有一个使用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);
                }
        }
}

BTW:代码编译正常,我在Raspberry Pi上运行它。 3.6.11 +#474预览Thu Jun 13 17:14:42 BST 2013 armv6l GNU / Linux

3 个答案:

答案 0 :(得分:8)

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

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

或添加换行符\n

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

取消注释对sleep的调用后,我无法重现行为的任何变化。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

如果您的代码在没有警告且没有包含unistd.h的情况下进行编译,则需要启动警告。