C++ でコンソールをクリアする方法

胡金庫 2023年10月12日
C++ でコンソールをクリアする方法

この記事では、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;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook