Bildschirm löschen



  • Mirsad schrieb:

    Hi supertux
    also selber mehrere \n ausgeben, oder ??? 😕
    mfg
    mirsad

    printf("\033[H\033[J");
    

    Das ist eine Escape Sequenz.

    Die sytstem.... Lösung ist nicht schön 😞 😕 sowas ist gefährlich. Außedem kenne ich Linux Systeme, die "clear" nicht haben.

    http://www.fun-soft.de/showtopic.php?threadid=3298&time=1070662657 mehr dazu



  • hi
    ach ja, stimmt, ich wuste aber keine andere lösung, danke 👍
    mfg
    mirsad



  • :mgsmiley system()

    Um welches Betriebssytem handelt sich jetzt? Ich verschieb es dann ins betreffende Forum.

    Wenn es sich um DOS und Win32-Konsole bzw. Windows handelt, dann verweise ich gleich mal auf die Konsolen-FAQ.



  • supertux schrieb:

    Mirsad schrieb:

    Hi supertux
    also selber mehrere \n ausgeben, oder ??? 😕
    mfg
    mirsad

    printf("\033[H\033[J");
    

    Das ist eine Escape Sequenz.

    Die sytstem.... Lösung ist nicht schön 😞 😕 sowas ist gefährlich. Außedem kenne ich Linux Systeme, die "clear" nicht haben.

    http://www.fun-soft.de/showtopic.php?threadid=3298&time=1070662657 mehr dazu

    @superturx

    leider gibt es die escapesequenzen unter windwos auch nur bis win98, da danach die ansi.sys nicht mehr eingebunden werden kann (wenigstens habe ich keinen erlebt, der das geschafft hat).
    leider ebensowenig standard, aber konsolenfaq hält, wie AJ schon sagte, einige weitere möglichkeiten bereit.

    im standard gehts dann wirklich nur mit zählen 😉



  • leider gibt es die escapesequenzen unter windwos auch nur bis win98

    wieso leider? Naja, was Windows macht, ist mir auch egal. ich weiß nur, mit ansi.sys geht das, ohne geht das nicht und ab winME kann man (soweit ich weiß und nach zahlreichen Versuchen) seine autoexec.bat und config.sys nicht schreiben, weil sie automatisch überschrieben werden, beim win98 war das nicht der Fall.



  • supertux schrieb:

    leider gibt es die escapesequenzen unter windwos auch nur bis win98

    wieso leider? Naja, was Windows macht, ist mir auch egal. ich weiß nur, mit ansi.sys geht das, ohne geht das nicht und ab winME kann man (soweit ich weiß und nach zahlreichen Versuchen) seine autoexec.bat und config.sys nicht schreiben, weil sie automatisch überschrieben werden, beim win98 war das nicht der Fall.

    stimmt, kein leider... bezog sich im eigentlichen nur darauf, daß hier der ansi c standard gilt, und der hält sowieso nix von farben.. 😉



  • Notfalls kann man ja immer noch das tun 😃

    include<stdio.h> 
    define CLEAR printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
    
     int main(){
     CLEAR
     /*Programmblock*/
     }
    


  • @Cico
    Ich bezweifle, dass das ein Compiler schluckt. 😉

    PS: Ich verschiebs jetzt ins Konsolenforum. Hierhin gehört es jedenfalls nicht.



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @AJ ja du hast recht:-)ich dachte das fällt keinem auf bzw.man ergänzt die fehlenden präprozessor zeichen und den rest selbst...

    #include <stdio.h>
    #define CLEAR printf("\n\n\n\n\n\n\n\n\n\n\n\n")
    int main(){
    CLEAR;
    /*Programmblock*/
    }
    


  • system ("cls");
    soll man aber irgendwie nicht nehmen, funktioniert aber bei mir.



  • Hi!

    Also wenn ich

    clrscr()
    

    benutze dann schreib ich die Funktions deklaration (oder definition? 😮 )in eine Header.

    #ifndef  _C_Screen_H
    #define  _C_Screen_H
    
    void clrscr()          // Windows Header notwendig.
       { 
         COORD coord; 
         DWORD written; 
         CONSOLE_SCREEN_BUFFER_INFO info; 
         coord.X = coord.Y = 0; 
         HANDLE std = GetStdHandle(STD_OUTPUT_HANDLE); 
         GetConsoleScreenBufferInfo(std, &info); 
         FillConsoleOutputCharacter(std,' ',info.dwSize.X*info.dwSize.Y,coord,&written); 
         coord.X = coord.Y = 0; 
         SetConsoleCursorPosition(std, coord); 
       } 
    
    #endif
    

    Somit dürfte es doch zu keinen schwirigkeiten kommen seitens des Benutzers oder ?

    cu



  • - Implementationen gehören nciht in den Header
    - Grottige Implementierung
    - Use Improved Console -> Konsolen-FAQ

    MfG SideWinder



  • @dgrat
    Das Problem bei system() ist, dass es den Befehl, den du übergibst einfach an den Komandozeileninterpreter des Betriebssystems weiterleitet. Wenn das zugrundeliegende Betriebssystem also CLS nicht kennt, dann bekommt der Benutzer des Programms einfach eine blöde Fehlermeldung wie:
    "Befehl oder Dateiname nicht gefunden!"
    Anstatt, dass der Bildschirm gelöscht wird. Und das ist ja nicht Sinn der Sache, oder?

    @spirit a project101
    Dann doch lieber die Lösung von Cico (@Cico nicht falsch verstehen ;))



  • Hi

    nagut dann packt man eben die Funktion Implementation in die cpp datei 😑
    aber warum ist dies eine so schlechte Lösung ? 😕 ich meine ist doch immer noch besser als system('clear') oder sowas ....

    @SideWinder: Warum grottig ? 😞

    cu



  • SpIriT alias PrOjEcT101 schrieb:

    Hi

    nagut dann packt man eben die Funktion Implementation in die cpp datei 😑
    aber warum ist dies eine so schlechte Lösung ? 😕 ich meine ist doch immer noch besser als system('clear') oder sowas ....

    @SideWinder: Warum grottig ? 😞

    cu

    Deine Implementierung könnte man auch so schreiben:

    void clrscr(void)
    {
       int x, y;
    
       for(y = 0; y < 24; ++y)
       {
          for(x = 0; x < 80; ++x)
          {
             printf(" ");
          }
       }
    }
    

    Deswegen ist der Vorschlag von Cico auch besser.
    Aber es gibt immer noch bessere und vor allem schnellere Lösungen, z. B. den Grafikmodus (bzw. Textmodus) neu zu initialisieren. Mehr macht, vermute ich, auch ein CLEAR bzw. CLS bzw. das entsprechende Escapekommando in der Kommandozeile auch nicht.
    Was das Problem bei system() bzw. den genannten Kommandos ist, hab ich ja schon erklärt.



  • Grottig weil FillConsoleOutputCharacter() noch viel zu High-Level ist. Nimm lieber die Console-Low-Level-Funktionen dafür her wenns um Geschwindigkeit geht. WriteConsoleOutputCharacter() zum Beispiel.

    The console functions enable different levels of access to a console. The high-level console I/O functions enable an application to read from standard input to retrieve keyboard input stored in a console's input buffer. The functions also enable an application to write to standard output or standard error to display text in the console's screen buffer. The high-level functions also support redirection of standard handles and control of console modes for different I/O functionality. The low-level console I/O functions enable applications to receive detailed input about keyboard and mouse events, as well as events involving user interactions with the console window. The low-level functions also enable greater control of output to the screen.

    MfG SideWinder



  • Ncohwas zum Aufpassen:

    WriteConsoleOutput() - low level
    WriteConsole() - high level

    !

    MfG SideWinder



  • Hi!

    @SideWinder: vielen dank für diese Info ! ^^
    wahr mir nicht bekannt ....
    tja ... wieder was gelernt 🙂

    cu


Anmelden zum Antworten