it-swarm.com.de

Wie kann ich die Konsole löschen?

Wie im Titel. Wie kann ich die Konsole in C++ löschen?

73
Thomas B

Für reines C++

Du kannst nicht C++ hat nicht einmal das Konzept einer Konsole.

Das Programm könnte auf einem Drucker drucken, direkt in eine Datei ausgeben oder zur Eingabe eines anderen Programms umgeleitet werden. Selbst wenn Sie die Konsole in C++ löschen könnten, würden diese Fälle erheblich unübersichtlicher.

Diesen Eintrag finden Sie in den FAQ zu comp.lang.c ++:

OS-spezifisch

Wenn es dennoch sinnvoll ist, die Konsole in Ihrem Programm zu löschen, und Sie an betriebssystemspezifischen Lösungen interessiert sind, gibt es diese.

Unter Windows (wie in Ihrem Tag) checken Sie diesen Link aus:

Bearbeiten: Diese Antwort wurde zuvor mit system("cls"); erwähnt, da Microsoft dies zugesagt hat. In den Kommentaren wurde jedoch darauf hingewiesen, dass dies ist keine sichere Sache . Ich habe den Link zum Microsoft-Artikel aufgrund dieses Problems entfernt.

Bibliotheken (etwas tragbar)

ncurses ist eine Bibliothek, die die Konsolenmanipulation unterstützt:

61

Für Windows über die Konsolen-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);
}

Es ignoriert glücklich alle möglichen Fehler, aber hey, es ist das Löschen der Konsole. Nicht wie system("cls") werden Fehler besser behandelt.

Für * Nixe können Sie normalerweise ANSI-Escape-Codes verwenden.

void clear() {
    // CSI[2J clears screen, CSI[H moves the cursor to top-left corner
    std::cout << "\x1B[2J\x1B[H";
}

Die Verwendung von system ist einfach hässlich.

45
Cat Plus Plus

Für Linux/Unix und möglicherweise einige andere, aber nicht für Windows vor 10 TH2:

printf("\033c");

setzt das Terminal zurück.

13
NoAngel

das Ausgeben mehrerer Zeilen an die Fensterkonsole ist nutzlos. Sie fügt lediglich leere Zeilen hinzu Leider ist Windows spezifisch und umfasst entweder conio.h (und clrscr () ist möglicherweise nicht vorhanden Win-API-Methode

#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 );
  }

Für POSIX-Systeme ist es viel einfacher, Sie können ncurses oder Terminalfunktionen verwenden

#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" ) );
  }
4
// #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;
}
4
Firefox_

Dies ist wirklich abgehackt, aber versuchen Sie:

void cls() {
    for (int i = 0; i < 250; ++i) {
        std::cout << endl;
    }
}
3
nullptr

Verwenden Sie system("cls"), um den Bildschirm zu löschen:

#include <stdlib.h>

int main(void)
{
    system("cls");
    return 0;
}
3
Wesam

Um den Bildschirm zu löschen, müssen Sie zunächst ein Modul hinzufügen:

#include <stdlib.h>

dadurch werden Windows-Befehle importiert. Dann können Sie die Funktion "System" verwenden, um Stapelbefehle auszuführen (die die Konsole bearbeiten). Unter Windows in C++ lautet der Befehl zum Löschen des Bildschirms:

system("CLS");

Und das würde die Konsole räumen. Der gesamte Code würde so aussehen:

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
system("CLS");
}

Und das ist alles was Sie brauchen! Viel Glück :)

3
user3179329

Unter Windows:

#include <cstdlib>

int main() { 
    std::system("cls");
    return 0;
}

In Linux/Unix:

#include <cstdlib>

int main() { 
    std::system("clear");
    return 0;
}
3
LoveToCode

Dies ist schwierig für MAC, da es keinen Zugriff auf die Windows-Funktionen hat, mit denen der Bildschirm gelöscht werden kann. Meine beste Lösung ist es, Zeilen zu schleifen und hinzuzufügen, bis das Terminal frei ist, und dann das Programm auszuführen. Dies ist jedoch nicht so effizient oder speicherfreundlich, wenn Sie dies hauptsächlich und häufig verwenden.

void clearScreen(){
    int clear = 5;
    do {
        cout << endl;
        clear -= 1;
    } while (clear !=0);
}
2
Max Goddard

Der einfachste Weg für mich, ohne das Rad neu erfinden zu müssen.

void Clear()
{
#if defined _WIN32
    system("cls");
#Elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__)
    system("clear");
#Elif defined (__Apple__)
    system("clear");
#endif
}
1
Joma

Hier ist eine einfache Möglichkeit, dies zu tun:

#include <iostream>

using namespace std;

int main()
{
    cout.flush(); // Flush the output stream
    system("clear"); // Clear the console with the "system" function
}
0
user9758081

In Windows haben wir mehrere Optionen:

  1. clrscr () (Header-Datei: conio.h)

  2. system ("cls") (Header-Datei: stdlib.h)

Verwenden Sie unter Linux system ("clear") (Header-Datei: stdlib.h)

0
Anurag Singh