man*_*m-n 2 c c++ animation ncurses console-application
我想设置光标位置以char在控制台屏幕上打印.有没有使用ncurses库的解决方案.
以下示例是否SetConsoleCursorPosition在Linux中有相应的调用:
void print (int x, int y, char c) {
COORD p = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), p);
printf("%c", c);
}
Run Code Online (Sandbox Code Playgroud)
也许有点历史.你在Windows中称之为"控制台"的确是一个终端模拟器的例子; 但是,与传统的终端仿真器不同,Windows通过其Console API提供对终端的直接访问.终端(以及终端仿真器)采用的传统方法是解释转义序列,每个转义序列指示终端执行某些操作.
不幸的是,正如您可能想象的那样,终端的功能变化很大(有些甚至可以绘制一种或另一种图形),因此并非所有终端都使用相同的转义序列集.这些天你很不幸遇到一些没有实现ANSI/VT100逃逸超集的东西; 如果您很乐意只支持ANSI/VT100及衍生产品,您可以发送ESC [ n ; m H,其中n是行号,m是列号.
但是,如果你这样做,如果它带有异国情调,你的代码将无法运行.在这种情况下,你真的应该考虑使用curses库(ncurses是常见但不是唯一的例子),即使你只是用它来从terminfo数据库中提取信息(尽管我强烈建议你使用curses)图书馆).
最后,请注意:您从Windows引用的代码不一定有效(!)为什么?因为printf()缓冲输出,并且无法保证在再次更改光标位置之前将字符发送到控制台.你可以通过使用来解决这个问题fflush(stdout),但老实说,如果你正在使用SetConsoleCursorPosition你,也可以使用WriteConsole并完成它.
其他有用的信息
您实际上可以获得在Windows上运行的curses版本; 参见例如PDCurses.如果您使用curses,那么您也不需要任何特定于Windows的代码,并且您将使用正在使用的终端.