C- while循环未解释的行为

kid*_*kid 5 c printf loops while-loop

我试图运行以下代码:

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

int main()
{
unsigned int ms, oldms = 0,dif;
struct timeval tv;
while(1)
{
 gettimeofday(&tv, NULL);
 ms=tv.tv_sec; 
 //printf("%d\n",ms-oldms );
 dif=ms-oldms;
 if(dif>3)
   {    
        printf("3 seconds up");
        oldms=ms;
   }
 }
}
Run Code Online (Sandbox Code Playgroud)

我希望它每隔3秒打印一次"3秒钟",但它不会显示该消息.我尝试使用gdb调试它,但似乎没有任何错误,仍然没有输出.在尝试调试时,我添加了一个printf语句,并且可以看到输出.

如果我在删除// printf("%d \n",ms-oldms)之后运行程序; 声明,再没有输出.我不确定发生了什么,是否依赖于任何事情.

$ gcc --version gcc(Ubuntu 4.8.2-19ubuntu1)4.8.2

P.P*_*.P. 10

输出缓冲是原因.

stdout当连接到终端设备时,默认情况下是行缓冲.您可以使用刷新了这一点,fflush(stdout);或使用\nprintf()printf("3 seconds up\n");.或者禁用它setbuf(stdout, 0);

I/O一般很慢.所以实现使用固定大小的缓冲区和printf一旦它满了.在实践中,fflush(stdout);过于频繁地调用会影响性能.