Zentrierte Ausgabe



  • Hi Leute!

    Ich habe vorhin schon im Board nach so einem Tread gesucht, aber leider nichts passendes gefunden.
    Ich wollte fragen, wie man in einem Printf einer Win32 Konsolenanwendung, einen Text zentriert ausgibt, da ich eine Turmrechnung habe, und das ganze gern schön ausgeben würde.

    Danke im Vorraus
    mfG waterpr00f



  • http://c-plusplus.net/forum/viewtopic.php?t=39319

    oder einfach mit Leerzeichen " " einrücken



  • naja das mit den Leerzeichen funktioniert nicht wirklich, da die Ausgabe bei jedem Durchlauf anders ist, bzw. länger wird, und das nach beiden richtungen. jemand meinte "Breite abfragen, und dann die Hälfte davon Minus der halben Länge des strings denn string beginnen lässt und das restliche bis dort hin mit leerzeichen füllt.", doch leider hab ich keine ahnung wie ich das anstellen soll.



  • naja das mit den Leerzeichen funktioniert nicht wirklich, da die Ausgabe bei jedem Durchlauf anders ist, bzw. länger wird, und das nach beiden richtungen. jemand meinte "Breite abfragen, und dann die Hälfte davon Minus der halben Länge des strings denn string beginnen lässt und das restliche bis dort hin mit leerzeichen füllt.", doch leider hab ich keine ahnung wie ich das anstellen soll.



  • Du hast nen Text

    char text[] = "Hallo Welt";

    und somit auch gleich die Länge

    size_t len = strlen(text);

    und du hast die Breite der Dos-Box, 80 Zeichen (kann man die eigentlich bei Windows ändern?).

    int anzahl_leerzeichen = 80/2 - len/2;

    Und jetzt musst du nur soviele Leerzeichen ausgeben, bevor du den Text ausgibst; zB. mit einer for-Schleife. Das überlass ich mal dir...



  • Hier eine Version die nicht von einer fixen Konsolengröße ausgeht:

    /*
    textout_centered
    
    Koordinatensystem für Zeile beginnt bei 1/1, bei Übergabe von 0 wird die
    derzeitige Zeile benützt. Die Cursor-Position bleibt unverändert. Die maximale
    Größe für die Konsole ist (unsinged short int - 1).
    */
    void textout_centered (const char* Text,unsigned short int Zeile = 0)
    {
        HANDLE hOut (GetStdHandle(STD_OUTPUT_HANDLE));
    
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        GetConsoleScreenBufferInfo(hOut,&csbi);
    
        unsigned short int BeginX (static_cast<unsigned short int>((csbi.dwSize.X / 2) - (strlen(Text) / 2)));
        unsigned short int BeginY (0);
        if(Zeile)
        {
            BeginY = Zeile - 1;
        }
        else
        {
            BeginY = csbi.dwCursorPosition.Y;
        }
    
        COORD OldPos;
        OldPos.X = csbi.dwCursorPosition.X;
        OldPos.Y = csbi.dwCursorPosition.Y;
        COORD NewPos;
        NewPos.X = BeginX;
        NewPos.Y = BeginY;
    
        SetConsoleCursorPosition(hOut,NewPos);
        cout << Text;
        SetConsoleCursorPosition(hOut,OldPos);
    }
    

    Bei auftretenden Fehlern bitte Posten.

    MfG SideWinder


Anmelden zum Antworten