![텍스트를 화면 중앙에 배치하기 위해 변경해야 할 사항 [닫기]](https://linux55.com/image/2839/%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%ED%99%94%EB%A9%B4%20%EC%A4%91%EC%95%99%EC%97%90%20%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EB%B3%80%EA%B2%BD%ED%95%B4%EC%95%BC%20%ED%95%A0%20%EC%82%AC%ED%95%AD%20%5B%EB%8B%AB%EA%B8%B0%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;
}