当前位置:  开发笔记 > 运维 > 正文

C- while循环未解释的行为

如何解决《C-while循环未解释的行为》经验,为你挑选了1个好方法。

我试图运行以下代码:

#include 
#include 

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;
   }
 }
}

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

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

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



1> P.P...:

输出缓冲是原因.

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

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

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有