Formatierung
-
Hi!
Hab mal ne Frage. Ist es mit einfachen Mitteln (printf, o.ä.) möglich einen Text auf der Mitte des Konsolenfensters auszugeben? Also sowohl vertikal als auch horizontal zu zentrieren? Danke für eure Antworten!
-
Es ist möglich, aber nicht mit einfachen Mitteln - dazu müsstest du zunächst die Größe des Konsolenfensters bestimmen und anschließend den Cursor an die richtige Anfangsposition für die Ausgabe schieben (beides geht nur mit Systemfunktionen).
-
Ist eigentlich nicht vorgesehen dafür. Aber du kannst mittels Zeilenumbrüchen ('\n) und Leerzeichen den Cursor so hinschieben, dass er passt. Die übliche Methode ist aber, die Konsolenfensterbreite- und höhe zu ermitteln, jeweils die Hälfte davon bilden, und per gotoxy() den Cursor an die Stelle platzieren. So ist er dann auch schön zentriert. Hier mal eine gotoxy()-Implementation:
void gotoxy (long x, long y) { COORD coord; coord.X = x; coord.Y = y; HANDLE ConsoleBuffer; ConsoleBuffer = GetStdHandle (STD_OUTPUT_HANDLE); SetConsoleCursorPosition (ConsoleBuffer, coord); }Oder so kannst du die Fensterbreite oder Höhe der Konsole ermitteln. Vergiss aber nicht, zuvor das Objekt von ConsoleBuffer zu erstellen (ist bereits im obigen Code gezeigt worden):
inline void GetCSBI () { GetConsoleScreenBufferInfo(ConsoleBuffer, &CSBI); } short GetConsoleScreenSizeX () { GetCSBI (); return CSBI.srWindow.Right - CSBI.srWindow.Left + 1; } short GetConsoleScreenSizeY () { GetCSBI (); return CSBI.srWindow.Bottom - CSBI.srWindow.Top + 1; } short GetConsoleCursorPosX () { GetCSBI (); return CSBI.dwCursorPosition.X; }
-
mikey schrieb:
...
COORD ... HANDLE ... ... GetStdHandle (STD_OUTPUT_HANDLE);... ...SetConsoleCursorPosition (... ...GetConsoleScreenBufferInfo(... ...GetCSBI ...Wat sin' dat denn für Vögel ?
Gruß,
Simon2.
-
WinAPI ^^
void gotoxy (long x, long y) { ::COORD coord = { x, y }; ::SetConsoleCursorPosition(::GetStdHandle(STD_OUTPUT_HANDLE), coord); }ist halt osdependet und unschön

-
(D)Evil schrieb:
WinAPI ^^...
Achso ...
(D)Evil schrieb:
...ist halt osdependent und unschön

Hatte ich auch stark vermutet und hätte es besser gefunden, wenn mikey darauf hingewiesen hätte.
Gruß,
Simon2.
-
Sorry, ich hätte das schon ansprechen sollen.
Ja, um es deutlich zu betonen: Es handelt sich hierbei um die WinAPI, und der Code ist platformabhängig. Und ob es "unschön" ist, lässt sich hier im Forum kaum ansprechen, da es wieder in einer unendlichen Diskussion endet. Deshalb sag ich mal garnichts dazu :p@(D)evil: Die verkürzte gotoxy() Funktion ist schon besser so. Bin einbisschen danebengestanden.