2017-05-04 226 views
0

我正在開發一些應用程序,我想操作一些來自嵌入式系統的數據。所以,我想要做什麼是我想要顯示在以前的相同位置上的值,將靜態文本留在相同的位置,而不是使用新行。更具體的說,我想以表格的形式輸出我的數據,並且在這張表中我想更新那些數據。在Linux中有一些類比,當終端中有一些更新值(假設有一些進展),而靜態文本保持不變,只有值正在改變。 因此,輸出應該是這樣的:C++控制檯輸出操作

Some_data:0xFFFF的

Some_data2:0xA1B3

Some_data3:0x1201

因此,在這種情況下, 「Some_data」 保持在同一位置不變,並且只有數據本身被更新。 是否有一些圖書館可以這樣做?那麼Windows控制檯的功能如何?另外,如果能夠以這種方式製作,其中控制檯不會輕彈,就像清除控制檯並打印回來一樣。任何提示或建議?非常感謝你們!

P.S.無需編寫代碼,我只需要一些提示或建議,如果可能(但不是必需的),只需很短的示例。

+0

你正在尋找類似ncurses的東西 - > http://invisible-island.net/ncurses/ – mutantkeyboard

+0

不是東西,而是ncurses。期。 –

+1

你不是很清楚你的目標平臺是什麼。 –

回答

0

在* nix系統上,您有兩個選項。

1)如果你想以表格形式操作整個控制檯,就像你問的那樣,那麼ncurses是最好的選擇。完整的參考文獻可在here找到。你可以看到,這個軟件包相當重量級,對於簡單的項目來說通常可能是矯枉過正的,所以我經常使用它。 ..

2)如果你可以包含在一行不斷變化的信息,請使用空格字符轉義和\b然後反覆重寫信息到該行

例如,試試這個。 。 。

#include <iostream> 
#include <chrono> 
#include <thread> 

using namespace std; 

void writeStuff(int d) 
{ 
    cout << string(100,'\b') << flush; 
    cout << "Thing = " << d; 
} 

int main() 
{ 
    cout << "AMAZING GIZMO" << "\n============" << endl; 
    while(1) { 
     writeStuff(rand()); 
     this_thread::sleep_for(chrono::milliseconds(250)); 
    } 
} 

對於現實世界的例子中,音頻sox控制檯重放命令通過顯示由控制檯字符來表示實時音頻重放水平的條形圖使用此技術,效果良好。

當然,如果您的控制檯支持ANSI escape sequences,您可以通過上面顯示的方法獲得更多創意。

+0

好吧,我猜這裏庫的大小並不重要,因爲除了顯示值之外,還有通信部分,處理部分等等,我希望輸出內容非常豐富和舒適,所以我不必不斷地向上/向下調整控制檯(我使用ConeEMU而不是簡單的Windows控制檯,但無論如何...) 。 – MrMan

+0

爲什麼不只是'cout <<「AMAZING GIZMO \ n ============ \ n」;'而不是打印3個單獨的字符串? –

+0

...不管怎樣,這條線有點兒是一次性的。格式化它,但是您想在代碼中閱讀它 – learnvst