以下程序将清除屏幕
#include <stdio.h>
int main()
{
fputs("\033[2J", stdout);
return 0;
}
那么,我应该在上面的代码中修改/添加什么才能将文本字符串放在屏幕中间?
注意:屏幕尺寸为:行=25,列=80
答案1
为了将文本放在屏幕中央,您需要知道 a = 您要打印的文本有多宽(以可见字符术语表示); b = 屏幕有多宽(以可见字符计);然后在字符串之前打印 (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;
}