我有一个使用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
答案 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的情况下进行编译,则需要启动警告。