さて、私はこれを行う方法を研究してきましたが、ターミナルで出力がすべてあるプログラムを実行していますが、プログラムを実行し続けることができるように、プログラム内から画面をクリアするにはどうすればよいですか?
ターミナルでclear
と入力するだけで問題は解決しますが、先ほど言ったように、このプログラムの場合は私にとってより有益です。
うまくいくものを見つけましたが、それが何なのか、何をしているのかわかりません。
cout << "\033[2J\033[1;1H";
それは機能しますが、あなたがそれを説明することができれば、それが何であるかについての手掛かりがありません。
これらはANSIエスケープコードです。最初のもの(\033[2J
)は、画面全体(J
)を上から下(2
)から消去します。 2番目のコード(\033[1;1H
)は、カーソルを行1
、列1
に配置します。
すべてのANSIエスケープはシーケンスで始まります ESC[で区切られたゼロ個以上のパラメーターを持ちます ;、コマンド文字(J そして H あなたの場合)。 \033
は、エスケープ文字のCスタイルの8進数シーケンスです。
完全なロードショーについては here をご覧ください。
予期しない状況で壊れる可能性のある特定のエスケープシーケンスに依存する代わりに(必要であればトレードオフは問題ありませんが)、シェルで行うのと同じことを行うことができます。
std::system("clear");
一般的にsystem()は避ける必要がありますが、ユーザー対話型プログラムでは、余分なシェルの解析もプロセスのオーバーヘッドも重要ではありません。この場合、シェルのエスケープにも問題はありません。
System()を回避したい場合は、常にfork/execを使用してclearを呼び出すことができます。 [n] cursesまたは別の端末ライブラリを既に使用している場合は、それを使用します。
移植性のために、termcapのcl(クリア)機能(クリアスクリーンとカーソルホーム)から文字列を取得する必要があります。 (または、Roger Pateの指示に従ってstd :: system( "clear")を使用します)。
man 3 termcap(ncursesで)
man 5 termcap
set | grep TERMCAP