如何将输出对齐到屏幕的中心- c++

How to align output to center of screen - C++?

本文关键字:c++ 屏幕 输出 对齐      更新时间:2023-10-16

我正在一个c++控制台应用程序上工作。我想执行和打印所有的东西在应用程序窗口屏幕的中心(水平+垂直)如下所示。

 --------------------------------
|                               |
|                               |
|         User : xyz            |
|         Pass : ****           |
|                               |
|                               |
 --------------------------------

我想像上面指出的那样运行我的整个程序。有什么办法吗?如有任何帮助或建议,不胜感激。

这个怎么样(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;
}

你懂的。当输出垂直居中时,只需在控制台的顶部放置填充结束行。

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;
}

如果你想让你的应用程序在一个控制台上,但想做一些布局,我建议使用ncurses,因为它给你更多的控制打印的地方,也给你一个创建菜单,消息框和其他类似gui的东西的可能性