我想从控制台的左上角开始打印一些动态状态文本消息,在Linux上将左侧区域留空(类似于watch -n 1 pwd).我如何使用C或C++来完成这项工作?

推荐答案

您的终端很有可能支持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....");
}

C++相关问答推荐

gcc已编译的可执行文件TSB是否同时暗示最低有效字节和最低有效位?

C:gcc返回多个错误定义,但msvc—不""'

Mise()在虚拟内存中做什么?

如何解决C中的严格别名?

使用C时,Windows CMD中的argc参数是否包含重定向命令?

什么是.c.h文件?

这个计算C中阶乘的函数正确吗?

如何使用libgpio(d)为Raspberry Pi编译C程序?

这个空指针类型的转换是有效代码还是恶意代码?

C:如何将此代码转换为与数组一起使用?

在运行时判断C/C++指针是否指向只读内存(在Linux操作系统中)

与外部SPI闪存通信时是否应禁用中断?

程序如何解释变量中的值

生成的头文件不包括用户定义的文件

';malloc():损坏的顶部大小';分配超过20万整数后

为什么这个代码的最后一次迭代不能正常工作?

C程序printf在getchar while循环后不工作

在我的第一个C语言中观察到的错误';你好世界';程序

如何在C中计算包含递增和递减运算符的逻辑表达式?

我错误地修复了一个错误,想了解原因