gpt4 book ai didi

c++ - 如何直接操作终端输出缓冲区

转载 作者:太空狗 更新时间:2023-10-29 11:44:18 24 4
gpt4 key购买 nike

我想在 Linux 终端(C/C++)中编写游戏,所以首先我应该能够打印我想要的角色。我试过使用“printf()”,但似乎有点不方便。我认为终端的输出字符应该有一个字符缓冲区。有没有办法直接操作缓冲区?

非常感谢。

最佳答案

它以不同的方式进行。终端不是别的,而是字符设备,这意味着它实际上是无缓冲的。尽管如此,您仍然可以使用适当的字符序列(称为“转义序列”)来操纵屏幕位置。例如,如果你发出\e[A (0x1B 0x91 0x41) 序列,光标会移动一行,同时保持字符不变,而如果你发出\e[10;10H, (0x1B 0x91 0x31 0x30 0x3B 0x31 0x30 0x48 ),您的光标将转到第 10 行的第 10 列(正是您想要的)。移动光标后,您写出的下一个字符将转到该位置。有关转义序列的更多信息,请查看 this link .

另一件需要了解的重要事情是终端的尺寸。 ioctl 可以告知您终端窗口的大小:

#include <stdio.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <unistd.h>
int main ()
{
struct winsize ws;
ioctl (STDOUT_FILENO, TIOCGWINSZ, &ws);
printf ("Rows: %d, Cols: %d\n", ws.ws_row, ws.ws_col);
return 0;
}

请注意,上述技术是一种向连接到伪终端设备的终端仿真器发送命令的解决方案。也就是说,终端设备本身保持无缓冲状态,命令由终端仿真器解释。

关于c++ - 如何直接操作终端输出缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27599233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com