タイトルのように。 C++でコンソールをクリアするにはどうすればよいですか?
純粋なC++の場合
できません。 C++にはコンソールという概念さえありません。
プログラムは、プリンタへの印刷、ファイルへの直接出力、または他のプログラムの入力にリダイレクトされます。 C++でコンソールをクリアできたとしても、これらのケースはかなり面倒になります。
Comp.lang.c ++ FAQの次のエントリを参照してください。
OS固有
プログラムでコンソールをクリアしても意味があり、オペレーティングシステム固有のソリューションに関心がある場合は、それらが存在します。
Windowsの場合(タグのように)、次のリンクを確認してください。
編集:Microsoftがそうするように言ったので、system("cls");
を使用して前述したこの回答。ただし、 これは安全なことではありません というコメントで指摘されています。この問題のため、Microsoftの記事へのリンクを削除しました。
ライブラリ(多少移植可能)
ncursesは、コンソール操作をサポートするライブラリです。
Windowsの場合、コンソールAPI経由:
void clear() {
COORD topLeft = { 0, 0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console, &screen);
FillConsoleOutputCharacterA(
console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
FillConsoleOutputAttribute(
console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
SetConsoleCursorPosition(console, topLeft);
}
可能性のあるすべてのエラーを喜んで無視しますが、それはコンソールのクリアです。 system("cls")
がエラーをより良く処理するのではない。
* nixesの場合、通常はANSIエスケープコードを使用できるため、次のようになります。
void clear() {
// CSI[2J clears screen, CSI[H moves the cursor to top-left corner
std::cout << "\x1B[2J\x1B[H";
}
これにsystem
を使用するのはisいだけです。
Linux/Unixおよび他のいくつかの可能性がありますが、10 TH2以前のWindowsではそうではありません。
printf("\033c");
端末をリセットします。
ウィンドウコンソールに複数の行を出力することは役に立ちません。空の行を追加するだけです。悲しいことに、方法はウィンドウ固有であり、conio.h(およびclrscr()が存在しない可能性があり、それは標準ヘッダーでもありません)またはWin APIメソッドを含みます
#include <windows.h>
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;
/* Move the cursor home */
SetConsoleCursorPosition( hStdOut, homeCoords );
}
POSIXシステムの場合、より簡単です。ncursesまたは端末関数を使用できます
#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
int result;
setupterm( NULL, STDOUT_FILENO, &result );
if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}
// #define _WIN32_WINNT 0x0500 // windows >= 2000
#include <windows.h>
#include <iostream>
using namespace std;
void pos(short C, short R)
{
COORD xy ;
xy.X = C ;
xy.Y = R ;
SetConsoleCursorPosition(
GetStdHandle(STD_OUTPUT_HANDLE), xy);
}
void cls( )
{
pos(0,0);
for(int j=0;j<100;j++)
cout << string(100, ' ');
pos(0,0);
}
int main( void )
{
// write somthing and wait
for(int j=0;j<100;j++)
cout << string(10, 'a');
cout << "\n\npress any key to cls... ";
cin.get();
// clean the screen
cls();
return 0;
}
これは本当に途切れ途切れですが、試してください:
void cls() {
for (int i = 0; i < 250; ++i) {
std::cout << endl;
}
}
system("cls")
を使用して画面をクリアします。
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
画面をクリアするには、最初にモジュールを含める必要があります。
#include <stdlib.h>
これにより、Windowsコマンドがインポートされます。次に、「システム」機能を使用して、バッチコマンド(コンソールを編集)を実行できます。 C++のWindowsでは、画面をクリアするコマンドは次のようになります。
system("CLS");
そして、それはコンソールをクリアします。コード全体は次のようになります。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("CLS");
}
そして、それはあなたが必要とするすべてです!がんばろう :)
Windowsの場合:
#include <cstdlib>
int main() {
std::system("cls");
return 0;
}
Linux/Unixの場合:
#include <cstdlib>
int main() {
std::system("clear");
return 0;
}
これは、画面をクリアするのに役立つウィンドウ機能にアクセスできないため、MAC参照で行うのは困難です。私の最善の解決策は、ターミナルがクリアになるまでループして行を追加し、プログラムを実行することです。ただし、これを主に頻繁に使用する場合、これは効率的でもメモリフレンドリーでもありません。
void clearScreen(){
int clear = 5;
do {
cout << endl;
clear -= 1;
} while (clear !=0);
}
車輪を再発明することなく私にとって最も簡単な方法。
void Clear()
{
#if defined _WIN32
system("cls");
#Elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__)
system("clear");
#Elif defined (__Apple__)
system("clear");
#endif
}
これを行う簡単な方法を次に示します。
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
Windowsには複数のオプションがあります:
clrscr()(ヘッダーファイル:conio.h)
system( "cls")(ヘッダーファイル:stdlib.h)
Linuxでは、system( "clear")(ヘッダーファイル:stdlib.h)を使用します