2012-02-07 514 views
5

我想創建一個小函數,它應該在控制檯中顯示當前狀態的百分比。該函數只應顯示行中的當前值。 所以我必須刪除最後一個輸出。那可能嗎?最好的情況是一些ANSI C的東西,該程序應該在Linux和Windows上工作。C刪除printf輸出

我已經發現了一些轉義序列像"\033[J",但沒有作用。

編輯

嗯,我有嘗試過:

void PrintProcessBar(int i, int n) { 
    float ratio = i/(float)n;  
    printf("%.3d\b\b", (int)(ratio * 100)); 
    fflush(stdout); 
} 

但它只是打印零分......出了什麼問題?如果我使用三個\b,我什麼也得不到。

float ratio = (i/(float)n) * 100; 
printf("\b\b\b\b"); 
fflush(stdout); 
printf("%.3d%c", (int)ratio, 37);   
fflush(stdout); 

I =當前位置。 n =最大運行。

我用4 \b因爲,在函數的第一次調用它會刪除4個空格。

Greetz。

+1

答案應該與問題分開。如果您想回答自己的問題,可以通過單擊此頁面底部的[回答您的問題]按鈕來完成。 – brandaemon 2016-01-20 21:58:59

回答

10

\b是用於退格的轉義序列。你可以用空格來刪除一行。

例如:

printf("98%"); 
fflush(stdout); 
// sleep some time 
printf("\b\b\b99%"); 
fflush(stdout); 

這應該打印98%,然後用99%替換它。

+0

好吧,我已經嘗試過了,但出了點問題。請參閱我的**編輯**。謝謝。格爾茨。 – hofmeister 2012-02-07 10:57:11

+0

您正在打印三個字符,但每次只返回兩個字符,您可能需要返回相同數量的打印件(另一個\ b應該可以工作)。 – MByD 2012-02-07 11:23:48

+0

我寫道,如果我用三個'\ b'' printf'不會打印任何東西。 – hofmeister 2012-02-07 11:46:49

6

你所尋找的是\r是回車。使馬車回到行的開頭。 不要使用\n,因爲它會下降一行。

因爲\ r不會刪除文本,但只是讓你覆蓋,你必須確保你足夠打印文本(空格如果需要)來清除您的線路。

+0

哦,這不是依賴於系統嗎? – 2012-02-07 10:19:43

+0

結束語依賴於系統(Linux和Mac的'\ n',windows的'\ r \ n','Acorn BBC和RISC OS假脫機文本輸出'的'\ n \ r'以及Commodore的'\ r' 8位機器,Acorn BBC,TRS-80,Apple II系列,Mac OS到版本9和OS-9 [來源](http://en.wikipedia.org/wiki/Newline)) – Eregrith 2012-02-07 10:26:52

+0

所以你會在Mac OS上有一個問題,最多爲9 – Eregrith 2012-02-07 10:30:30