我希望能够使用SetCursorPosition函数使用x和y坐标进行打印,但据我所知,正确的方法是使用ncurses。是否可以使用默认的c库,如stdio或stdlib?
答案 0 :(得分:2)
C标准库I / O函数是围绕使用发送或接收的字节流设计的。这些字节流被发送到某些设备,例如终端或打印机或文件或网络设备。标准库I / O实际上面向文本终端,文本打印机和文件流,其中字节流或文本字符流写入设备句柄或从设备句柄读取。
关于标准库的唯一设备特定定位适用于使用ftell()
和fseek()
以及rewind()
和fgetpos()
以及{{等功能的文件1}}(参见what is difference between fgetpos/fsetpos and ftell/fseek关于差异的解释)。
C标准库I / O功能没有任何终端或打印机设备特定功能,例如定位光标,设置文本颜色或文本字体,定位窗口,更改窗口或图形用户常用的任何其他功能接口或图形打印机(激光或喷墨)。
常见的解决方法是使用特殊字符escape codes来指示后面的文本是设备本身的命令,然后指定命令,例如设置光标位置或设置文本颜色。这些命令序列有许多事实上的标准,这取决于目标设备。
在过去80列,25行终端中,大多数终端都支持事实上的标准,其中一些光标定位元素以VT-100 video terminal from Digital Equipment Corporation提供的模式为基础。
为了访问该游标定位功能,开发了第一个C兼容库,以便程序员可以指定游标位置,库函数将为该位置创建正确的转义码序列并将其发送到终端。 / p>
ncurses是这些早期库的现代版本,可能是最常用于文本终端仿真的,当不需要完整的GUI时。
您可能会发现这个List of platform-independent GUI libraries很有帮助,尽管GUI库可能对您实际需要的东西有些过分。
的各种答案答案 1 :(得分:0)
您可以执行类似
的操作printf("\033[%d;%dH", row, column);
printf("text I want to print");
fflush(stdout);
如果您要做很多事情,可以将其封装为函数:
void mySetCursorPosition(int row, int column)
{
printf("\033[%d;%dH", row, column);
}
这完全是不可移植的,它盲目地假设您的终端(或终端仿真窗口)使用传统的ANSI转义序列 - 现在它们都这样做了,所以这很可能适合你。
当你想要做更高级别或更便携的事情的那一天,你可以了解它。