2014-09-19 82 views
-3

所以我一直想知道如何做這個一段時間,並且我認爲誰最好再問SO社區。打印到沒有滾動的終端

如果這有點含糊,我很抱歉,但我會盡我所能來解決我的問題。

我們都記得我們第一次被打印語句陷入無限循環。終端填滿很快,很快你會看到一堆滾動文字...

我該如何讓它不滾動?我的意思是...如何覆蓋已經寫好的行。

如何使一行打印語句(不超過一個新行)只能在一行上打印我的無限循環。終端不滾動的地方。

Instead of .... 
    This is an infinite loop 
    This is an infinite loop 
    This is an infinite loop 

You just have one line that updates every iteration of the loop. 
    This is an infinite loop 

感謝您的閱讀,評論如果這完全沒有,因爲。我會嘗試澄清在一個陰天的世界......

PS - 我現在正在做的是在C,但它不會傷害知道如何在其他語言做到這一點。

問題(0.1)

如果想更新多行代碼,該怎麼辦?

printf("This is some text\n"); 
printf("This is more text\n"); 

這會給我兩條線,我想更新它們但不滾動。

+0

什麼是您正在使用的操作系統?你能告訴我嗎? – 2014-09-19 04:41:13

+2

這不是特定於C/C++的,它特定於您正在使用的終端以及配置方式。大多數終端識別ANSI''\ r'字符,將光標移回行的開頭而不會導致新行(因此不滾動) – Galik 2014-09-19 05:04:12

+0

感謝您的答覆。自從現在我想到這一點以來,總是這樣。 – 2014-09-25 16:45:30

回答

1

嘗試......

while(1) 
{ 
    printf("this id infinite loop\n"); 
    sleep(1); 
    system("clear"); 
} 
+0

+1值得一提,但比'\ r'便攜便宜得多。 – 2014-09-19 05:26:06

3

您可以使用回車轉義序列,或\r。這會將光標返回到行的開頭。

while (1) 
{ 
    std::cout << "\rTest."; 
} 
3

你只需要回車,不換行,因此你只需要使用「\ r」 回車意味着將光標回行的開頭。 換行意味着將新行添加到終端。

在C:

while(1) 
{ 
    printf("\r This is an infinite loop."); 
} 

由於printf的被緩衝,因此這是一個很好的做法,明確地刷新輸出流。

+0

你可能想明確地衝洗太... ...? – 2014-09-19 05:13:33

+0

@Tony D - 由於printf被緩衝,所以顯式刷新輸出流是一種很好的做法。 – 2014-09-19 05:17:03

+1

我確實知道這一點,這就是爲什麼我巧妙地暗示你可能會相應地更新你的代碼...... ;-)。 – 2014-09-19 05:25:22