我想实时打印程序启动后经过的秒数首先,输出是“0”一秒钟后,“0”替换为“1”,依此类推这是我最初写的代码。

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

void main ()
{
  long int time;

  printf("Hello, let us measure the time!\n");

  time=clock();
    printf("%ld", 0);

  while(time/CLOCKS_PER_SEC<7)
    {
        time=clock();
        if(time%CLOCKS_PER_SEC==0)
        {
            printf("\r");
            printf("%ld", time/CLOCKS_PER_SEC);
        }
    }
}

仅在7秒结束时输出“7”。
如果我进行以下替换,代码可以正常工作。
    printf("%ld", 0);

通过
    printf("%ld\n", 0);


            printf("\r");
            printf("%ld", time/CLOCKS_PER_SEC);

通过
            printf("\33[A");    //vt100 char, moves cursor up
            printf("\33[2K");   //vt100 char, erases current line
            printf("%ld\n", time/CLOCKS_PER_SEC);

问题是直到当前行完全确定后才会发送输出这里发生了什么事?
我在Ubuntu上使用gcc编译器。

最佳答案

使用printf()写入的输出流将缓冲,直到收到换行符由于您没有发送换行符,所以直到应用程序退出或缓冲区填满后才会刷新。
您可以在每次printf()之后自己刷新输出缓冲区,正如海德在上面的注释中使用fflush(stdout)所说。
或者可以使用setbuf(stdout,NULL)禁用缓冲;

关于c - 在C中打印,延迟和删除当前行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36235470/

10-11 21:00