2017-05-12 49 views
-2

以下是我的代碼: -爲什麼' b'在下面這段C代碼中工作?

#include <stdio.h> 
#include <unistd.h> 

int main() 
{ 
    int i; 
    printf("Continue in..."); 
    for (i = 10; i > 0 ; --i) 
    { 
     printf("%d",i); 
     sleep(1); 
     printf("\b"); 
    } 
} 

我試圖讓在C倒數計時器,這樣只有我改變對STDOUT,和字的值「繼續...」保持原樣(即在屏幕的相同位置)。

但上面的代碼會產生什麼10秒,而只是打印字符串「繼續......」 10秒後。

我讀this回答它說,\ B的行爲是終端依賴。 我的問題是我應該在我的代碼中編輯以使其輸出獨立於輸出設備。

+0

行爲\ B'取決於什麼是管理你的輸出:終端,控制檯,串行線等... – LPs

+4

[\ B與\ r在C用法]的可能的複製(http://stackoverflow.com/questions/17236242/usage-of-b-and-r-in-c) – gsamaras

+0

這個問題再次... – RoiHatam

回答

3

printf的函數的輸出通常行緩衝。這意味着直到打印換行符時纔會看到任何輸出。

如果調用fflush(stdout),這將刷新輸出緩衝區,所以你可以看到結果。

printf("Continue in..."); 
fflush(stdout); 
for (i = 10; i > 0 ; --i) 
{ 
    printf("%d",i); 
    fflush(stdout); 
    sleep(1); 
    printf("\b"); 
    if (i == 10) printf("\b \b"); // for 10 you need to erase 2 characters 
} 
+0

感謝:-),我讀了更多關於輸入緩衝區和輸出緩衝區以及C如何處理緩衝區的內容。明白了。 – 1c3b3r6

-1

你必須在printf("%d",i);%d之後添加\n。由於緩衝區不會被換行或直到它已滿。

+0

'stdout'的緩衝是特定於實現的。 –

0

或者,撥打setvbuf(stdout, NULL, _IONBF, 0)在開始。 `的

相關問題