【发布时间】:2016-03-22 14:22:57
【问题描述】:
我正在尝试运行以下代码:
#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;
}
}
}
我希望它每 3 秒打印一次“3 seconds up”,但它不会显示该消息。 我尝试使用 gdb 对其进行调试,但似乎没有任何问题并且仍然没有输出。 在尝试调试时,我添加了一条 printf 语句,神奇地可以看到输出。
如果我在删除 //printf("%d\n",ms-oldms ); 后运行程序语句,再次没有输出。我不确定发生了什么以及它是否依赖于任何东西。
$gcc --version gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
【问题讨论】:
-
尝试在你的 printf 上换行
-
@Jorgel ,在 printf 中添加换行符有效。但是,我仍然对这种行为感到困惑。这是我第一次遇到这种情况。
-
你有无限循环——这是“第一次”。即使没有换行符,如果您在
printf之后添加break,它也可以正常工作。 -
stdout(printf()写入的内容)通常会被缓冲,并且在打印换行符(或称为fflush(stdout))之前通常看不到任何内容。
标签: c loops while-loop printf