prev up next   top/contents search

comp.lang.c FAQ 列表· 第 19.4 题

我该如何清屏?
如何以彩色显示文本?
如何将光标移动到特定的 x, y 位置?


这类操作取决于您使用的终端类型(或显示器)。您需要使用诸如 termcap、terminfo 或 curses 之类的库,或者一些特定于系统的例程来执行这些操作。

curses 库中要查找的函数有:clear, move, standout/standend,而attron/attroff/attrset;最后三个函数用于处理属性代码,例如 A_REVERSE。在 MS-DOS 库中,通常有以下函数:gotoxyclrscr_clearscreen;您也可以使用 ANSI.SYS 驱动程序或低级中断。在 termcap 或 terminfo 中,使用tgetstr来检索字符串,例如cl, so/se,而cm分别代表清屏、突出显示模式和光标移动,然后输出这些字符串;使用cm还需要调用tgoto。某些老式终端需要注意其他的“功能”;请仔细研究文档。请注意,某些较旧的终端可能根本不支持所需的功能。

大多数现代终端仿真方案都支持用于光标移动和视觉属性的 ANSI 转义序列,因此如果您不介意牺牲可移植性,可以直接打印这些序列。这里有一个小例子,让您初步了解一下:

printf("\033[2J");		/* clear screen */
printf("\033[%d;%dH", 10, 20);	/* move cursor (row 10, col 20) */
printf("Hello, ");
printf("\033[7mworld\033[0m!");	/* inverse video */
以下是一个链接,提供了一些更详细的解释和代码简要列表。 如果您不打算使用 curses,那么发出这些序列的可移植方法是使用 termcap 或 terminfo;这里有一个示例。

为了清屏,一种半可移植的解决方案是打印一个换页符('\f'),这会使某些显示器清屏。更可移植(尽管更简陋)的方法可能是打印足够的换行符来滚动掉所有内容(尽管这会将光标留在屏幕底部,而不是顶部)。作为最后的手段,您可以使用system(请参阅第 19.27 题)来调用操作系统清屏命令。

参考文献:PCS 第 5.1.4 节第 54-60 页,第 5.1.5 节第 60-62 页
Strang,《curses 编程》
Strang, Mui, and O'Reilly,《termcap & terminfo》


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管