次の手順で画面が消去されます。
#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;
}