在基于UNIX的系统上使用C和C++清除屏幕



我想知道:如何在基于UNIX的系统上清理屏幕?我在互联网上搜索了一下,但我刚刚找到了如何在Windows:system("CLS")上做到这一点我不想完全清理屏幕,但我想打开一个"新页面",比如在NANO和VI编辑器中。感谢

也许您可以使用转义码

#include <stdio.h>
#define clear() printf("33[H33[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);
} 
#include <stdlib.h>
int main(void)
{
    system("clear");
}

可移植的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来获得您想要的任何功能,尽管这可能会为清除屏幕这样简单的事情拖进很多东西。尽管如此,这还是一个需要认真考虑的选择,因为它给了你更多的灵活性。

这通常不是清除屏幕的问题,而是制作一个终端感知应用程序的问题。

您应该使用ncurses库并阅读ncurses编程HowTo

(你可能会像David RF回答的那样使用一些ANSI转义码,但我认为这不是一个好主意)

您可以使用CSI序列来实现这一点:

#include <stdio.h>
int main()
{
    printf("x1b[Hx1b[J");
}

什么是x1b[H

实际上,它与x1b[1;1;H相同,意味着它将把光标移动到第1行和第1列。

什么是x1b[J又称x1b[0;J

若n为0或缺失,它将从光标到屏幕末尾清除。

来源:https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences

只需在#include<stdio.h>之后使用#include<stdlib.h>

然后可以在main() { 之后使用命令system("clear");

即:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    system("clear");

完成这些命令后,您可以继续执行程序。

希望这有帮助:)

要使用termcaps清除屏幕,请使用以下命令:

write(1, tgetstr("cl", 0), strlen(tgetstr("cl", 0)));

system("clear");与标头#include <stdlib.h>(对于C语言)或#include <cstdlib>(对于C++)一起使用。

此代码用于清除屏幕,并在终端风格窗口中重置滚动条位置

#include <iostream>
int main(){
   std::cout << "33c";
   return 0;
}

相关内容

  • 没有找到相关文章

最新更新