Screen clearen



  • El Oha schrieb:

    ich hab nicht so richtig gewusst wie ich das aausdrücken soll und hab deswegen nichts gefunden

    Du wärst nicht von selbst auf "c clear console" gekommen? Glaube ich nicht 😉

    Und das heißt alles, dass es keinen von C eindeutig definierten Weg gibt, das Terminal/die Konsole zu reinigen. Das ist Betriebssystemabhängig. Eine Betriebssystemangabe hast du nicht gemacht, außer dass es so sein soll wie "cls" unter Windows. Deswegen kam ein Beispiel für Linux.

    Dokumentation für write.
    STDOUT_FILENO ist der Default-Deskriptor für die Standardausgabe, die gereinigt werden soll. Und das "\ec" ist der Escape-Code, der die Konsole bereinigt. Die 2 gibt nur die Anzahl der Bytes an, die write schreiben soll. Ganz einfach.

    Wenn du ein anderes Betriebssystem gemeint hast, musst du das schon sagen, hellsehen können wir nämlich nicht.



  • Schau dir mal für Windows die Improved Console (hier aus dem Forum) an: https://www.c-plusplus.net/forum/307418
    oder für Linux curses bzw. ncurses



  • Ah vielen Dank fuer die Erklaerung, ich benutze naemlich nicht gerne Code dessen Bedeutung ich nicht wirklich kenne. 🙂
    Und das mit dem Betriebssystem werde ich mir in Zukunft merken!



  • unter windows kannst du es auch bequem mit system("cls") machen.
    wird hier zwar immer nicht so gerne gesehen, aber es wird von microsoft so empfohlen. Beweis

    eben so wie du es aus den batch-dateien schon kennst.



  • HansKlaus schrieb:

    unter windows kannst du es auch bequem mit system("cls") machen.
    wird hier zwar immer nicht so gerne gesehen, aber es wird von microsoft so empfohlen. Beweis

    Naja, "empfohlen" ist was Anderes. system("cls") ist so ziemlich die schlechteste Lösung die man sich nur vorstellen kann. Wenn, dann die zweite, ebenfalls auf der verlinkten Seite präsentierte Lösung verwenden.

    Mit system("cls") startest du jedes Mal ein weiteres Programm – eine andere .exe, welche vom Betriebssystem erstmal gesucht, gefunden, evtl. von der Platte geladen, in den Speicher gemapped, initialisiert, gescheduled und schlussendlich aufgerufen werden muss – welches die Zeichenfolge "cls" durchgeht, nur um festzustellen, das es einfach nur das tun soll, was du auch direkt tun könntest, das dann tut und sich beendet – und vom Betriebssystem wieder deinitialisiert und geunmapped werden muss – während dein Programm auf die Antwort wartet, bevor es weiterlaufen kann. Das all dies einen unglaublichen Overhead für so eine simple Operation darstellt, braucht man – glaub ich – nicht weiter auszuführen. Wenn ich meine Tafel gelöscht haben will, schreib ja auch nicht einen Brief an den internationalen Tafellöschdienst in Canberra, mit der Bitte um einen Termin, zu dem die dann jemanden vorbeischicken um mir die Tafel zu löschen, auch wenn das physisch im Moment vielleicht weniger anstrengend für mich wäre... 😉



  • ja das stimmt wohl. system("cls") steht aber weiter oben. 😃

    also wenn es nur um das üben von konsolenausgaben geht, würde ich aus bequemlichkeitsgründen system("cls") verwenden (weil übersichtlicher) und im professionellen bereich eben die andere methode.

    eine weitere möglichkeit wäre noch, den alten borland-compiler zu verwenden, da gibt es in der conio.h die funktionen clrscr() und gotoxy(), mit denen man wunderbar herumspielen kann.

    edit: es geht auch folgendermaßen

    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    


  • HansKlaus schrieb:

    eine weitere möglichkeit wäre noch, den alten borland-compiler zu verwenden, da gibt es in der conio.h die funktionen clrscr() und gotoxy(), mit denen man wunderbar herumspielen kann.

    Diese Funktionen kann man sich unter Windows doch ganz wunderbar selbst schreiben, wenn man sich ein bisschen hiermit beschäftigt:
    https://msdn.microsoft.com/de-de/library/windows/desktop/ms682073(v=vs.85).aspx
    Und so ganz nebenbei lernt man noch eine ganze Menge über die Konsole und die Möglichkeiten, die man damit hat.



  • Wenn dus einfach und plattformunabhängig haben willst: Schau nach, wie auf den verschiedenen Betriebssystemen die Programme heißen, um den Bildschirm zu bereinigen. Dann schreibst du dir ne Funktion clear_screen() und benutzt darin Präprozessoren à la #ifdef windows mach das #elif defined(whatever) mach das.



  • Belli schrieb:

    HansKlaus schrieb:

    eine weitere möglichkeit wäre noch, den alten borland-compiler zu verwenden, da gibt es in der conio.h die funktionen clrscr() und gotoxy(), mit denen man wunderbar herumspielen kann.

    Diese Funktionen kann man sich unter Windows doch ganz wunderbar selbst schreiben, wenn man sich ein bisschen hiermit beschäftigt:
    https://msdn.microsoft.com/de-de/library/windows/desktop/ms682073(v=vs.85).aspx
    Und so ganz nebenbei lernt man noch eine ganze Menge über die Konsole und die Möglichkeiten, die man damit hat.

    Ja, klar für einen Anfänger ganz einfach ...

    Unter Windows sieht das ungefähr so aus:

    void myclrscr()
    {
        HANDLE set = GetStdHandle(STD_OUTPUT_HANDLE);
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        GetConsoleScreenBufferInfo(set, &csbi);
    
        COORD pos;
        DWORD written;
        pos.X = 0;
        pos.Y = 0;
        FillConsoleOutputCharacter(set, ' ', 
             csbi.dwSize.X * csbi.dwSize.Y, pos, &written);
    }
    


  • wenn man jetzt noch darauf hinweist, dass die funktionen GetStdHandle(),GetConsoleScreenBufferInfo() und FillConsoleOutputCharacter() super erklärt werden, wenn man sie in die suchmaschine eingibt, ist das doch ganz einfach.
    zumindest dann, wenn man weiß, was funktionen, strukturen, variablen und zeiger und vielleicht noch handles sind.


Anmelden zum Antworten