Hie guys我是初学者C程序员,当我编写一个简单的终端手表时,我注意到我的代码执行顺序有问题:不是显示我运行程序的时间,首先光标闪烁大约3秒钟,然后显示时间。这是我的代码:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 10
int main(int argc, char** argv)
{
time_t t;
size_t sz;
clock_t now;
struct tm* tm;
static char strtm[BUFSIZE];
while (1)
{
now = clock();
t = time(NULL);
tm = gmtime(&t);
sz = strftime(strtm, sizeof(strtm), "%T", tm);
#if 1
for (;(clock() - now) < (CLOCKS_PER_SEC/3);)
printf("\r");
#endif
printf("%s", strtm);
}
return 0;
}
因此,为了测试程序序列,我编写了以下简单代码,它的行为方式类似。我想要下面的代码是
然而,在显示“1 2 3 4”
之前,它首先等待5秒钟#include <time.h>
#include <stdio.h>
int main()
{
clock_t now = clock();
printf("1 2 3 4");
printf("\r");
for (;(clock() - now) < (5 * CLOCKS_PER_SEC);)
;
return 0;
}
我正在使用linux,所以我尝试使用sleep()
函数,得到了相同的结果:
#include <unistd.h>
#include <stdio.h>
int main()
{
printf("1 2 3 4");
printf("\r");
sleep(5);
return 0;
}
我需要你帮助我理解程序的顺序,因为它似乎首先在loop / sleep()
之前运行for printf()
函数。更正非常受欢迎。谢谢。
答案 0 :(得分:2)
您很可能只看到输出缓冲的效果。请注意,与'\r'
不同,'\n'
通常不会刷新输出缓冲区。因此,请使用fflush()强制执行所需的行为,例如
printf("1 2 3 4");
printf("\r");
fflush(stdout);