为什么';这个小C程序不能按预期工作吗?

为什么';这个小C程序不能按预期工作吗?,c,C,我有一个利用difftime的小C程序。这真的很奇怪,它在10秒后没有打印出来 但是,如果我取消了sleep行的注释,那么它就工作了 知道为什么会这样吗 /* difftime example */ #include <stdio.h> /* printf */ #include <time.h> /* time_t, struct tm, difftime, time, mktime */ int main () { time_t start

我有一个利用difftime的小C程序。这真的很奇怪,它在10秒后没有打印出来

但是,如果我取消了sleep行的注释,那么它就工作了

知道为什么会这样吗

/* 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);
                }
        }
}
/*difftime示例*/
#包括/*printf*/
#包括/*time\u t、struct tm、difftime、time、mktime*/
int main()
{
开始、停止时间;
开始=时间(空);
对于(;/*某些需要永远满足的条件*/;){
//做那些显然要花很长时间的事情。
停止=时间(空);
双微分=微分时间(停止、启动);
//睡眠(1);
如果(差异>=10){
printf(“10秒过去了…”);
开始=时间(空);
}
}
}
顺便说一句:代码编译得很好,我在Raspberry Pi上运行它。
3.6.11+#474抢占Thu Jun 13 17:14:42英国夏令时2013 armv6l GNU/Linux控制台IO可能是行缓冲的。试试冲洗

printf("10 seconds passed...");
fflush(stdout)
或添加换行符
\n

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

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

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

printf("10 seconds passed...");
fflush(stdout)
printf("10 seconds passed...\n");
或添加换行符
\n

printf("10 seconds passed...\n");
当对
sleep
的调用未注释时,我无法再现行为上的任何变化。

对于sleep(),您需要包括unistd.h,以及添加一个新行,正如其他人指出的那样

printf("10 seconds passed...\n");
#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */
#include <unistd.h>     /* sleep() */
#包括/*printf*/
#包括/*time\u t、struct tm、difftime、time、mktime*/
#包括/*睡眠()*/
如果您的代码在编译时没有警告,也没有包含unistd.h,那么您需要增加警告。

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

#include <stdio.h>      /* printf */
#include <time.h>       /* time_t, struct tm, difftime, time, mktime */
#include <unistd.h>     /* sleep() */
#包括/*printf*/
#包括/*time\u t、struct tm、difftime、time、mktime*/
#包括/*睡眠()*/

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

但是
sleep(1)
会如何改变任何东西?谢谢-换行符\n起作用了。我已经为此挣扎了好几个小时:)@NPE最初我没有提到睡眠。我无法解释为什么这会影响事情,也无法重现报道的结果。我已经相应地更新了我的答案。但是
sleep(1)
将如何改变任何事情呢?谢谢-这条新行\n起作用了。我已经为此挣扎了好几个小时:)@NPE最初我没有提到睡眠。我无法解释为什么这会影响事情,也无法重现报道的结果。我已相应地更新了答案。无法复制。一旦我在
printf()
中添加了一个换行符,无论是否使用
sleep(1)
,代码都可以正常工作。请描述复制所需的确切步骤。无法复制。一旦我在
printf()
中添加了一个换行符,无论是否使用
sleep(1)
,代码都可以正常工作。请描述复制所需的确切步骤。