gpt4 book ai didi

c++ - 如何设置标准输出的控制台光标位置

转载 作者:行者123 更新时间:2023-11-30 16:19:02 25 4
gpt4 key购买 nike

我想设置光标位置以在控制台屏幕上打印char。有没有不使用ncurses库的解决方案。

Linux 中是否有对 SetConsoleCursorPosition 的等效调用,来自 example如下:

void print (int x, int y, char c) {
COORD p = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), p);
printf("%c", c);
}

最佳答案

也许有必要了解一下历史。 Windows 中所谓的“控制台”实际上是终端仿真器的一个示例;然而,与传统的终端仿真器不同,Windows 通过其控制台 API 提供对终端的直接访问。终端(以及终端模拟器)采用的传统方法是解释转义序列,每个转义序列都指示终端执行某些操作。

不幸的是,正如您可能想象的那样,终端的功能差异很大(有些甚至可以绘制一种或另一种图形),因此并非所有终端都使用相同的转义序列集。这些天你会非常不幸地遇到一些没有实现 ANSI/VT100 escapes 超集的东西。 ;如果您愿意只支持 ANSI/VT100 及其衍生版本,您可以发送 ESC [ n ; m H,其中 n 是行号,m 是列号。

但是,如果您这样做,那么如果代码中包含任何异国情调,则该代码将无法工作。在这种情况下,您确实应该考虑使用curses库(ncurses是一个常见但不是唯一的示例),即使您只是使用它从terminfo数据库中提取信息(尽管我强烈建议只使用curses库)。

最后,请注意:您从 Windows 引用的代码不一定有效(!)为什么?因为 printf() 会缓冲输出,并且不能保证在您再次更改光标位置之前您的角色将被发送到控制台。您可以使用 fflush(stdout) 来解决此问题,但老实说,如果您使用 SetConsoleCursorPosition,您也可以只使用 WriteConsole 即可完成有了它。

其他有用信息

您实际上可以获得在 Windows 上运行的诅咒版本;参见例如PDCurses 。如果您要使用curses,那么您也不需要任何特定于Windows 的代码,并且您可以在使用的任何终端上工作。

关于c++ - 如何设置标准输出的控制台光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733728/

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