ClearScreen + Co.



  • Also, ich bin ein alter FreePascaler, der schon viel Erfahrung in Free- bzw. TurboPascal hat und dem auch QBasic, RGH Profan, PHP, JavaScript und Auszeichnungssprachen wie HTML nicht fremd sind, doch jetzt zu meinem Problem.
    Bei QBasic und Pascal gibt es bestimmte Befehle (ClrScr, CLS, ...), die den Bildschirm löschen und die Cursorposition wieder nach links oben auf dem Bildschirm setzen.

    Ich weiß, bei C gibt es diese Escape-Sequenzen, doch damit kann man dieses Bildschirmlöschen schließlich nur simulieren, was unter Windows im DOS keinen Unterschied macht, doch bei Linux macht das Probleme, denn in der Console kann man herumscrollen. Wenn mein Programm den leeren Bildschirm dann durch Zeilensprünge (\n) simuliert, dann kann der User das unter Linux ja zurückverfolgen und das ist nicht gut, außerdem ist das wohl jenseits jedes guten Programmstils. (alles im Textmodus selbstverständlich)

    Grüße,
    Vitamin-C

    PS.: Es gibt unter Pascal einen Befehl mit dem man im Textmodus genau die Cursorposition festlegen konnte (gotoxy), gibt es dafür ebenfalls einen adäquaten Befehl ?

    PSS.: Dieses Forum mit seinem Nichtzwang zur Registrierung ist ein Segen ! Danke an den-/diejenigen, die das veranlasst haben !



  • Die Frage gehört eigentlich nicht hierhin, weil sie über Standard-C++ hinaus geht. Da das abhängig vom Betriebssystem ist, würde ich im entsprechenden Forum posten.
    Ansonsten ist die Improved-Console (Win32-Konsole) von Marc++us nur zu empfehlen, die sicher einige der von Dir gesuchten Funktionen bereitstellt, und unter Linux würde ich mir mal NCurses oder libterm (wobei ich mir beim Namen nicht mehr sicher bin...) anschauen.



  • C++ kennt keine Konsole, nur Streams. Wäre gut, wenn dieses Topic in das Konsolenforum verschoben würde.

    ... zu spät 😉 😞

    [ Dieser Beitrag wurde am 18.06.2002 um 22:02 Uhr von Michamab editiert. ]



  • Wäre gut, wenn dieses Topic in das Konsolenforum verschoben würde

    Nicht ganz so schnell.

    @<Vitamin-C>
    Wie bereits gesagt wurde kennt Standard-C++ weder Bildschirme noch Cursorpositionen.

    Deshalb hier meine beiden Standardfragen:
    Welches BS? Welcher Compiler?



  • Ja, also mein BS ist momentan Windows, aber ich würde halt gern den Code weitestgehend für beide Betriebssysteme schreiben, sodass ich nur noch minimale (oder sogar gar keine) Änderungen machen muß. Weil ich das Programm letztliche gern auf Linux portieren (oder wie immer man das nennen will) würde.
    Von NCurses habe ich schon einmal was gehört und von der anderen Lib leider noch nichts, also ich bin auch noch ziemlich neu mit der Materie aber bin ähnlich bei Pascal damals eingestiegen und somit würde auch diesmal wieder mit diesen Befehlen ein kleines Programm schreiben um eben ein Gefühl für DIESE Sprache zu entwickeln (Schleifen, Variablen, ...).

    Ich habe den kostenlosen Borland c++ - Compiler der Version 5.0.



  • Hallo,
    ich verschiebe dich erstmal ins Konsolenforum.

    Du kannst ja zusätzlich auch noch einmal im Linux/Unix-Forum nachfragen.



  • also ich weiss genau das das beides mit printf ging... ich weiss den code nur nichtmehr ( \irgendwas ), da musich zuhaus nochma nachschaun(schon 3 jahre her 😃 kann sein das man ansi.sys dazu braucht inner autoexec 😕 ) ... aber conio.h hat doch auch ein gotoxy drin

    [ Dieser Beitrag wurde am 19.06.2002 um 11:11 Uhr von dreaddy editiert. ]



  • Für Windows kann ich nur die Improved Console empfehlen (siehe Konsolen-FAQ). Sie bietet alles was du willst - nur eben keine Linux-Kompatibilität.

    Grundsätzlich ist es sehr schwer, solche Dinge portabel zu erledigen. Wenn du willst zerbrich ich mir mal den Kopf darüber.

    @dreaddy: Du redest wahrscheinlich von Escapesequenzen (printf ("\033[2J")), allerdings geht das auch nur unter Windows9.x!

    MfG SideWinder



  • Ich danke an dieser Stelle allen Leuten für ihre Antworten und Tipps, ich bin ziemlich schnell in der FAQ fündig geworden 😃 und für alle, die das gleiche Problem hatten, wie ich, hier ein Auszug aus einem Beitrag zum Thema "ClrScr" von SideWinder:

    // C-Version von clrscr()
    #include <stdio.h>

    void clrscr ()
    {
    printf ( "\033[2J" );
    }

    Für Linux müßte man folgendes verwenden aus der Bibliothek ncurses:

    int main()
    {
    cout << "bla bla bla" << endl;
    system( "clear" );
    }

    Diese Information habe ich cypoc zu verdanken.

    Also nochmal großen Dank an alle, ich glaube ich kann mich jetzt doch zu einer Registrierung durchringen ;D.



  • Original erstellt von <Vitamin-C>:
    **
    Für Linux müßte man folgendes verwenden aus der Bibliothek ncurses:

    int main()
    {
    cout << "bla bla bla" << endl;
    system( "clear" );
    }
    **

    system() ist NICHT aus der NCurses!
    system() ist extrem lahm!



  • Wenn du einen Befehl für alle Windows Version suchst, für die Konsole habe ich nach langem probieren mir das hier zusammengestellt,:

    #include <windows.h>
    void clrscr (void)
    {
        char blank=' ';
        COORD position={0,0};
        HANDLE console;
        CONSOLE_SCREEN_BUFFER_INFO fenster;
        DWORD dummy;
        console=GetStdHandle(STD_OUTPUT_HANDLE);
        GetConsoleScreenBufferInfo(console,&fenster);
        FillConsoleOutputCharacter(console,blank,fenster.dwSize.X*fenster.dwSize.Y,position,&dummy);
    }
    
    void gotoxy (int x, int y)
    {
        COORD position={0,0};
        HANDLE console;
        console=GetStdHandle(STD_OUTPUT_HANDLE);
        position.X=x-1;
        position.Y=y-1;
        SetConsoleCursorPosition(console,position);
    }
    

    du brauchst für die clrsrn - function, doch fehlt dir wahrscheinlich, wenn dir clrscr fehlt auch gotoxy.

    Was mich wundert bei meinem Borland ist ********mäßig schon clrscr () und gotoxy () dabei, du musst nur glaube ich conio.h includen.
    Den Quellcode oben benutze ich nur bei MS VC++, da es die beiden Befehle dort nicht gibt.



  • // Ursprung ist [0,0]
    BOOL gotoxy (SHORT x, SHORT y)
    {
        COORD c = {x,y};
        return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    }
    

    MfG SideWinder



  • so und das ganze nochmal für c bitte 🤡



  • Denker schrieb:

    so und das ganze nochmal für c bitte 🤡

    3 Jahre ist der Thread alt, omg, ich bin ja schon 3 Jahre hier 😮

    Mein Programmierstil hat sich auch verändert, hab das mal abgeändert 🙂

    MfG SideWinder



  • SideWinder schrieb:

    ...ich bin ja schon 3 Jahre hier 😮

    Kurz gerechnet: Das macht dann pro Tag 10 Postings - Respekt! 😉



  • Strenni schrieb:

    SideWinder schrieb:

    ...ich bin ja schon 3 Jahre hier 😮

    Kurz gerechnet: Das macht dann pro Tag 10 Postings - Respekt! 😉

    Das kommt locker Zusammen bei einem Moderator 😃 Du musst auch noch bedenken, dass man nicht jeden Tag hier sein kann ;).

    @Denker
    Das von SideWinder gillt auch für C, allerdings nicht für ANSI-C 😉



  • @AJ: Unsere "Geburtsdaten" hier im Forum liegen ja nur wenige Zentimeter entfernt 😉

    BTW: Es ist auch kein ISO-C++, aber wie auch? ;):)

    MfG SideWinder



  • SideWinder schrieb:

    BTW: Es ist auch kein ISO-C++, aber wie auch? ;):)

    Dafür MS-Standard 😃 🤡


Anmelden zum Antworten