2017-05-04 33 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システムでは、2つのオプションがあります。

1)質問するようにコンソール全体を表形式で操作したい場合は、ncursesが最適です。完全な参考文献はhereです。

ご覧のとおり、このパッケージはかなり重量があり、単純なプロジェクトでは過度に使用されることが多いため、よく使用します。あなたは、単一のライン上の変更情報が含まれているバックスペースエスケープ文字\bを使用して、例えばそのライン

に繰り返し情報を書き換えることができれば...

2)、これを試してみてください。 。 。現実世界での例

#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

これは値の表示の他にコミュニケーションがあるので、ライブラリのサイズはそれほど重要ではないと思います私は出力を非常に有益で快適にしたいので、コンソールを常に上下にシフトする必要はありません(私は普通のWindowsコンソールの代わりにConeEMUを使用しますが、とにかく...) 。 – MrMan

+0

なぜ3つの別々の文字列を印刷するのではなく、単に 'cout <<"驚くばかりのギフト\ n ============ \ n ";' –

+0

... errrその線はちょっと使い捨てです。フォーマットしますが、コード内で読むことをお勧めします – learnvst

関連する問題