我想知道:如何在基于UNIX的系统上清理屏幕? 我在网上search,但我刚刚发现如何做到这一点在Windows系统(“CLS”)我不想完全清理cpmpletely屏幕,但我想打开一个“新的一页”,如在NANO和VI编辑。 谢谢
也许你可以使用转义码
#include <stdio.h> #define clear() printf("\033[H\033[J") int main(void) { clear(); return 0; }
但请记住,这种方法是不兼容所有终端
您可以使用下面的代码使用termcap清除屏幕。 (不要忘记与图书馆链接)
#include <stdio.h> #include <stdlib.h> #include <termcap.h> void clear_screen() { char buf[1024]; char *str; tgetent(buf, getenv("TERM")); str = tgetstr("cl", NULL); fputs(str, stdout); }
通常不是只是清除屏幕,而是使终端感知应用程序。
您应该使用ncurses库并阅读NCURSES编程HowTo
(你可以使用一些ANSI的转义代码,如David RF所回答的,但我不认为这是个好主意)
可移植的UNIX代码应该使用terminfo数据库来处理所有的游标和屏幕操作。 这就是像curses
这样的库来实现窗口等效果。
terminfo数据库维护一个能力列表(例如clear
哪个是你将用来清除屏幕并将光标发送到顶部)。 它为各种各样的设备维护这些功能,因此您不必担心您是使用Linux控制台还是(过时的)VT52终端。
至于你如何得到某些操作的字符流,你可以选择使用system
来做到这一点的历史悠久但相当可怕的方法:
system ("tput clear");
或者,您可以将该命令的输出捕获到缓冲区,以便稍后使用时只涉及输出字符,而不是重新运行该命令:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> static char scrTxtCls[20]; static size_t scrSzCls; // Do this once. FILE *fp = popen ("tput clear", "r"); scrSzCls = fread (scrTxtCls, 1, sizeof(scrTxtCls), fp); pclose (fp); if (scrSzCls == sizeof(scrTxtCls)) { actIntelligently ("you may want to increase buffer size"); } // Do this whenever you want to clear the screen. write (1, cls, clssz);
或者,您可以使用ncurses
进行链接,并使用其API获取所需的任何功能,但这可能会拖拽相当多的东西,例如清除屏幕等。 不过,这是一个认真考虑的选择,因为它给了你更多的灵活性。
#include <stdlib.h> int main(void) { system("clear"); }
要使用termcaps清除屏幕,请使用以下命令:
write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
在#include<stdio.h>
之后使用#include<stdlib.h>
#include<stdio.h>
。
那么你可以使用命令system("clear");
在main() {
即:
#include<stdio.h> #include<stdlib.h> int main() { system("clear");
这些命令后,您可以继续您的程序。
希望这可以帮助 :)
使用system("clear");
头文件#include <stdlib.h>
(用于C语言)或#include <cstdlib>
(用于C ++)。