![テキストを画面の中央に配置するために変更する必要がある[閉じる]](https://linux33.com/image/2839/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E7%94%BB%E9%9D%A2%E3%81%AE%E4%B8%AD%E5%A4%AE%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
次の手順で画面が消去されます。
#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;
}