C - 设置Printf坐标,无需外部库

时间:2018-05-10 16:47:15

标签: c

我希望能够使用SetCursorPosition函数使用x和y坐标进行打印,但据我所知,正确的方法是使用ncurses。是否可以使用默认的c库,如stdio或stdlib?

2 个答案:

答案 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库可能对您实际需要的东西有些过分。

另请参阅Cross Platform C library for GUI Apps?

的各种答案

答案 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转义序列 - 现在它们都这样做了,所以这很可能适合你。

当你想要做更高级别或更便携的事情的那一天,你可以了解它。