2013-06-01 34 views
2

我正在嘗試爲加載欄設置動畫。在UNIX中輸出退格字符

它的工作原理完全罰款在Windows中執行以下操作:

for(int j=0; j<currentSize; ++j) 
     cout<<static_cast<char>(219); 
    for(int k=maxSize; k>=currentSize; k--) 
     cout<<static_cast<char>(177); 
    ... 
    for(int l = 0; l<maxBarSize; l++){ 
     cout<<'\b'; 

當我嘗試在UNIX,但是,退格命令不起作用。它不會刪除或打印任何內容。我也嘗試使用'^H' intend '\b'

在UNIX中不能擦除輸出控制檯行嗎?

+4

嘗試'cout.flush()'。你也可以使用'\ r''。請注意,退格不會清除任何內容 - 只會將光標移回。 – Elazar

+0

這樣做的技巧,謝謝! –

回答

3

您是否試過印刷[backspace][space][backspace]?這會在您嘗試擦除的字符上方打印一個空格。如果這不起作用,我懷疑問題不在於你的代碼,而在於你的終端模擬器(xterm等)。有些支持像退格一樣,有些不支持(有些可以配置) 。

Aso,Elazar對comment做出了約cout.flush()的調整。這是因爲大部分時間,stdout行緩衝。這意味着這些庫將緩衝寫入stdout的所有數據,直到遇到換行符爲止,此時緩衝區被刷新爲實際的文件描述符。通過調用flush(),您正在強制將輸出緩衝區立即寫入文件(TTY)。

3

打印\b^h就是這麼做的:它會「打印」這些字符。它不執行「回刪」操作,這是TTY程序對鍵盤輸入做出的響應。您沒有在輸出中看到它們,因爲它們不是可見的字符。他們改變光標位置。如果印刷:

Hello, World!\b\b\b\b\b\bEarth! 

你會看到所有的字符,如果您發送的輸出到文件。但在終端上,它可能看起來像:

Hello, Earth! 

「世界!」角色仍然存在,只是被「地球!」覆蓋。