C++ でコンソールをクリアする方法
胡金庫
2023年10月12日
この記事では、C++ でコンソールをクリアする方法をいくつか紹介します。
ANSI エスケープコードを使用してコンソールをクリアする
コンソールを操作して出力テキストをクリアするための C++ 言語機能は組み込まれていません。しかし、ANSI エスケープコードは、この目標を達成するための比較的ポータブルな方法となります。エスケープコードは、ASCII エスケープ文字とブラケット文字で始まるバイト列で、その後にパラメータが続きます。これらの文字は出力文字列に挿入することができ、コンソールは表示します。テキストではなくコマンドとして解釈します。
ANSI コードには、カーソルの上下移動、行内消去、スクロール、および他のいくつかのオプションのような機能を持つ複数のコンソール出力シーケンスが含まれています。以下のコード例では、画面全体を消去し、スクロールバックバッファを削除しない Erase in Display
シーケンスを使用しています。コードをより柔軟に読みやすくするために、clear
という名前の別の関数を作成していることに注意してください。
#include <iostream>
using std::cout;
using std::endl;
void Clear() { cout << "\x1B[2J\x1B[H"; }
int main() {
cout << "Some console filling text ..." << endl;
cout << "Another filler string for the stdout\n"
"Another filler string for the stdout\n"
"Another filler string for the stdout\n"
"Another filler string for the stdout\n"
"Another filler string for the stdout\n"
<< endl;
Clear();
return EXIT_SUCCESS;
}
または、次のコードサンプルのように、コンソール画面全体をクリアしてスクロールバックバッファを削除するために、同じエスケープシーケンスを少し修正して挿入することもできます(2 を 3 に置き換えてください)。いくつかの有用な ANSI 制御シーケンスを以下の表に示します。また、こちらの Wikipedia ページも参考にしてください。
コード | 名前 | 効果 |
---|---|---|
CSI n A |
カーソルアップ | ターミナルカーソルを n セル分だけ上に移動させる。カーソルが既に端にある場合、シーケンスコマンドは何の効果もません。 |
CSI n B |
カーソルダウン | ターミナルカーソルを n セル分下に移動させる。カーソルが既に端にある場合、このシーケンスコマンドは何の効果もません。 |
CSI n J |
ディスプレイの消去 | ターミナルウィンドウの一部をクリアします。n が 0 か指定されていない場合、カーソルの現在位置からウィンドウの末尾までをクリアします。n が 1 の場合、カーソル位置からウィンドウの先頭までをクリアします。n が 2 の場合は画面全体をクリアします。n が 3 の場合、ウィンドウ全体をクリアし、スクロールバックバッファの行を削除します。 |
CSI n K |
インラインで消去 | 行の一部を消去します。n が 0 または指定されていない場合、カーソルから行末までを消去します。n が 1 の場合、カーソルから行頭までを消去します。n が 2 の場合、行全体をクリアします。 |
#include <iostream>
using std::cout;
using std::endl;
void ClearScrollback() { cout << "\x1B[3J\x1B[H"; }
int main() {
cout << "Some console filling text ..." << endl;
cout << "Another filler string for the stdout\n"
"Another filler string for the stdout\n"
"Another filler string for the stdout\n"
"Another filler string for the stdout\n"
"Another filler string for the stdout\n"
<< endl;
ClearScrollback();
return EXIT_SUCCESS;
}