How to align output to center of screen - C++?
32,728
Solution 1
If you want to keep your application in a console, but want to do some layouts I'd recommend using ncurses as it gives you more control on where you print, and also gives you a possibility to create menus, message boxes and other GUI-like stuff.
Solution 2
How about this (LIVE EXAMPLE):
#include <iostream>
#include <string>
#include <vector>
void centerify_output(std::string str, int num_cols) {
// Calculate left padding
int padding_left = (num_cols / 2) - (str.size() / 2);
// Put padding spaces
for(int i = 0; i < padding_left; ++i) std::cout << ' ';
// Print the message
std::cout << str;
}
int main() {
std::vector<std::string> lines = {
"---------------------------------",
"| |",
"| |",
"| User : xyz |",
"| Pass : **** |",
"| |",
"| |",
"---------------------------------",
};
int num_cols = 100;
// VIRTUAL BORDER
std::cout << std::endl;
for(int i = 0; i < num_cols; ++i) std::cout << ' ';
std::cout << '|' << std::endl;
// OUTPUT
for(int i = 0; i < lines.size(); ++i) {
centerify_output(lines[i], num_cols);
std::cout << std::endl;
}
// VIRTUAL BORDER
std::cout << std::endl;
for(int i = 0; i < num_cols; ++i) std::cout << ' ';
std::cout << '|' << std::endl;
}
You get the idea. When centering the output vertically, you just put padding end lines at the top of the console.
Solution 3
Example for WIN:
#include <windows.h>
int main()
{
HANDLE screen = GetStdHandle( STD_OUTPUT_HANDLE );
COORD max_size = GetLargestConsoleWindowSize( screen );
char s[] = "Hello world!";
COORD pos;
pos.X = (max_size.X - sizeof(s) ) / 2;
pos.Y = max_size.Y / 2;
SetConsoleCursorPosition( screen, pos );
LPDWORD written;
WriteConsole( screen, s, sizeof(s), written, 0 );
return 0;
}
Author by
ashu
Updated on July 09, 2022Comments
-
ashu almost 2 years
I am working on a C++ console app. I want to execute and print all the stuff at the centre of app window screen (horizontally + vertically) as shown below.
-------------------------------- | | | | | User : xyz | | Pass : **** | | | | | --------------------------------
I want to run my whole program as pointed out above. Is there any way to do so? Any help or suggestion would be appreciated.