c++ 如何在linux上打印从控制台左上角开始的文本?

bqujaahr  于 2023-08-09  发布在  Linux
关注(0)|答案(2)|浏览(129)

我想从控制台的左上角开始打印一些动态状态文本消息,在linux上将左侧区域留空(类似于watch -n 1 pwd)。如何使用C或C++实现?

dy1byipe

dy1byipe1#

您的终端很可能支持ANSI escape codes。这些提供了一种改变终端输出属性、控制光标等的方法。
在下面的程序中,ESC被定义为转义码前缀,CLS被定义为清除屏幕的控制序列,HOME被定义为将光标移动到控制台窗口左上角的原始位置的控制序列。在支持ANSI转义码的终端模拟器中,将这些代码打印到终端窗口应该会产生预期的效果。
请注意,C语言不支持这一点,但终端模拟器广泛支持这一点。

#include <stdio.h>

/* ANSI Escape Sequences */
#define ESC  "\x1B"
#define CLS  ESC"[2J"
#define HOME  ESC"[H"

void clear_to_top(void) {
    printf(CLS);
    printf(HOME);
    fflush(stdout);
}

int main(void) {
    clear_to_top();
    puts("Starting from the top....");
}

字符串

wnvonmuf

wnvonmuf2#

您可以清除终端屏幕,并通过向终端打印'\f'字节将光标设置到左上角。例如:putchar('\f'),但请记住,默认情况下stdout是行缓冲的,因此您可能需要使用fflush(stdout)刷新缓冲输出。
'\f'代表 form feed,用于从打印机弹出页面的命令,并被终端解释为 clear screen 命令。
ASCII中的字节值为12,也称为Ctrl-L。
一些终端以这种方式处理它,但似乎OP的ConEmu,也不是macOS的Terminal或iTerm 2,也不是大多数X-Windows终端。所以这绝对不是解决问题的办法。

相关问题