テキストを画面の中央に配置するために変更する必要がある[閉じる]

テキストを画面の中央に配置するために変更する必要がある[閉じる]

次の手順で画面が消去されます。

#include <stdio.h>
int main()
{
    fputs("\033[2J", stdout);
    return 0;
}

それでは、画面の中央に文字列を入れるには、上記のコードで何を修正/追加する必要がありますか?

注:画面サイズは行=25、列=80です。

答え1

画面の中央にテキストを配置するには、a =表示される文字で印刷するテキストの幅、b = 表示される文字で画面の幅を知る必要があります。その後、文字列の前に印刷します。 2 - a/2) バッファリングされた空白文字。

このロジックは、他の関連ビットとともにcursesライブラリで処理されます。活用してみることをお勧めします。

答え2

以下はあなたに適したおおよそのアプローチです。まず、端末サイズを検索して文字列の位置を計算する必要があります。

#include <iostream>
#include <cstring>
#include <sys/ioctl.h>

using namespace std;

void output_middle (const char *s, int term_cols)
{
    cout << string ( (term_cols - strlen(s)) >> 1, ' ') << s << endl;
}

int main ( int argc , char **argv ) 
{
    struct winsize w;
    ioctl(0, TIOCGWINSZ, &w);

    output_middle ("some string", w.ws_col);
    return 0;
}

答え3

#include <stdio.h>
#include <string.h>


static void print_middle(int rows, int cols)
{
    int vt = rows/2,
        ht = 0;

    char *message = "Please wait, Copying from network ...";

    ht = (cols - strlen(message))/2;

    fputs("\033[2J", stdout);

    printf("%c[%d;%df", 0x1B, ht, vt);

    printf("%s", message);

}

int main()
{
    print_middle(25, 80);

    return 0;
}    

関連情報