我想知道:如何在基于UNIX的系统上清理屏幕?我在互联网上搜索,但我刚刚在Windows上找到了如何做到这一点:system(“CLS”) 我不想完全清理屏幕,但我想打开一个“新页面”,例如在NANO和VI编辑器中。感谢
答案 0 :(得分:21)
也许您可以使用转义码
#include <stdio.h>
#define clear() printf("\033[H\033[J")
int main(void)
{
clear();
return 0;
}
但请记住,此方法与所有终端不兼容
答案 1 :(得分:15)
您可以使用以下代码将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);
}
答案 2 :(得分:4)
便携式UNIX代码应该使用terminfo数据库进行所有光标和屏幕操作。这就像curses
这样的库用来实现窗口等效果。
terminfo数据库维护一个capabailities列表(如clear
,您可以使用它来清除屏幕并将光标发送到顶部)。它为 wide 系列设备维护此类功能,因此您无需担心是使用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来获取您想要的任何功能,尽管这可能会拖拽相当多的内容,只需清除屏幕即可。不过,这是一个值得认真考虑的选择,因为它可以给你更大的灵活性。
答案 3 :(得分:3)
通常不仅仅是清除屏幕,而是制作终端感知应用程序。
您应该使用ncurses库并阅读NCURSES programming HowTo
(您可以使用ANSI escape codes作为David RF回答,但我认为这不是一个好主意)
答案 4 :(得分:3)
#include <stdlib.h>
int main(void)
{
system("clear");
}
答案 5 :(得分:0)
要使用termcaps清除屏幕,请使用:
write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));
答案 6 :(得分:0)
在#include<stdlib.h>
之后使用#include<stdio.h>
。
然后您可以在system("clear");
main() {
命令
即:
#include<stdio.h>
#include<stdlib.h>
int main()
{
system("clear");
完成这些命令后,您可以继续学习该程序。
希望这会有所帮助:)
答案 7 :(得分:0)
将system("clear");
与标题#include <stdlib.h>
(对于C语言)或#include <cstdlib>
(对于C ++)一起使用。
答案 8 :(得分:0)
您可以使用CSI序列实现此目的:
#include <stdio.h>
int main()
{
printf("\x1b[H\x1b[J");
}
\x1b[H
是什么?实际上它与\x1b[1;1;H
相同,这意味着它会将光标移动到第1行和第1列。
\x1b[J
a.k.a \x1b[0;J
是什么?如果n为0或缺失,它将从光标到屏幕的末尾清除。
来源:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences
答案 9 :(得分:0)
此代码用于清除带有终端样式窗口中滚动条位置的清晰屏幕
#include <iostream> int main(){ std::cout << "\033c"; return 0;}