web-dev-qa-db-ja.com

UNIXベースのシステムでCおよびC ++の画面をクリアしますか?

知りたい:UNIXベースのシステムで画面をきれいにする方法は?私はインターネットで検索しましたが、Windowsでそれを行う方法を見つけました:system( "CLS")画面を完全にきれいにしたくないが、 NANOおよびVIエディターで。ありがとう

12
user2355660

たぶん、あなたはエスケープコードを利用することができます

#include <stdio.h>

#define clear() printf("\033[H\033[J")

int main(void)
{
    clear();
    return 0;
}

ただし、この方法はすべての端末と互換性があるわけではないことに注意してください

21
David Ranieri

画面をクリアするためにtermcapを使用する次のコードを使用できます。 (ライブラリとリンクすることを忘れないでください)

#include <stdio.h>
#include <stdlib.h>
#include <termcap.h>

void clear_screen()
{
char buf[1024];
char *str;

tgetent(buf, getenv("TERM"));
str = tgetstr("cl", NULL);
fputs(str, stdout);
} 
15
Shar

ポータブルUNIXコードは、すべてのカーソルおよび画面操作にterminfoデータベースを使用する必要があります。これは、cursesなどのライブラリがウィンドウ処理などの効果を実現するために使用するものです。

Terminfoデータベースは、機能のリストを保持します(clearなど、画面をクリアしてカーソルを一番上に送信するために使用します)。 wideデバイスの範囲に対してこのような機能を維持しているため、Linuxコンソールを使用しているか(最新の)VT52端末を使用しているかを心配する必要はありません。

特定の操作のget文字ストリームの方法については、systemを使用してそれを行うだけの、昔ながらの恐ろしい方法を選択できます。

system ("tput clear");

または、そのコマンドの出力をバッファーにキャプチャして、コマンドを再実行するのではなく、文字を出力するだけで後で使用することもできます。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

static char scrTxtCls[20]; static size_t scrSzCls;

// Do this once.

FILE *fp = popen ("tput clear", "r");
scrSzCls = fread (scrTxtCls, 1, sizeof(scrTxtCls), fp);
pclose (fp);
if (scrSzCls == sizeof(scrTxtCls)) {
    actIntelligently ("you may want to increase buffer size");
}

// Do this whenever you want to clear the screen.

write (1, cls, clssz);

または、ncursesとリンクし、そのAPIを使用して必要な機能を取得できますが、これは画面をクリアするだけの簡単な操作のためにかなりのものをドラッグする可能性があります。それでも、それはあなたに多くの柔軟性を与えるので、真剣に検討するオプションです。

4
paxdiablo

通常、画面をクリアするだけの問題ではなく、端末対応アプリケーションを作成します。

ncurses ライブラリを使用し、 NCURSESプログラミングHowTo を読む必要があります。

(おそらく ANSIエスケープコードDavid RF として使用できますが、良いアイデアだとは思いません)

#include <stdlib.h>
int main(void)
{
    system("clear");
}
3
Naffi

system("clear");をヘッダー#include <stdlib.h>(C言語の場合)または#include <cstdlib>(C++の場合)とともに使用します。

0
Ammar Saleem

このコードは、ターミナルスタイルウィンドウのスクロールバーの位置をリセットするクリアスクリーン用です#include <iostream> int main(){ std::cout << "\033c"; return 0;}

0
Andreadjk

_#include<stdlib.h>_の後に_#include<stdio.h>_を使用するだけです。

その後、コマンドsystem("clear"); after main() {を使用できます

すなわち:

_#include<stdio.h>
#include<stdlib.h>

int main()
{
    system("clear");
_

これらのコマンドの後、プログラムを続行できます。

お役に立てれば :)

0

CSIシーケンスを使用してこれを実現できます。

#include <stdio.h>
int main()
{
    printf("\x1b[H\x1b[J");
}

\x1b[Hとは何ですか?

実際には\x1b[1;1;Hと同じです。つまり、カーソルを行1と列1に移動します。

\x1b[J a.k.a \x1b[0;Jとは何ですか?

Nが0または欠落している場合、カーソルから画面の終わりまでクリアされます。

ソース: https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences

0
Ryozuki

Termcapsを使用して画面をクリアするには、これを使用します:

write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
0
Jonsmoke