簡體   English   中英

在 C 中打印、延遲和擦除當前行

[英]Print, delay and erase current line in C

我想實時打印自程序開始以來經過的秒數。 首先輸出為“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() 之后自己刷新輸出緩沖區,正如 hyde 在上面使用 fflush(stdout) 的評論中所說的那樣。

或者您可以使用 setbuf( stdout, NULL ); 禁用緩沖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM