2017-05-04 218 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