1

每次我要去控制台printf(带有 GCC 编译器的 Windows 环境)时,我都会尝试清除控制台。我正在使用 CygWin,我能做到的唯一方法是使用system("cmd /c cls");. 这很好用,但它会导致屏幕闪烁几分之一秒,这显然很烦人。

有没有其他清除控制台屏幕的方法?

4

2 回答 2

1

我要做的第一件事就是停止使用cmd它。CygWin,假设你在 shell 中的某个地方而不是 Windows 控制台中运行,有一个“本机”选项,你可以使用以下任一选项:

clear
tput clear

清除屏幕,而不调用外部cmd解释器。

因此,在 CygWin 中运行的程序中,您可以使用简单的命令清除屏幕:

system("clear");

当然,如果您不想运行任何外部可执行文件,您可以使用curses. 例如,以下程序会为您清除屏幕(确保-lcurses在编译命令的末尾包含):

#include <curses.h>

int main (void) {
    WINDOW *w = initscr();
    clear(); refresh(); sleep(2);
    endwin();
    return 0;
}

不要挂断它在退出时恢复的事实,您不会将此程序用作屏幕清除独立的东西。相反,这些语句将被合并到您自己的程序中,在initscr()andendwin()调用之间,例如:

#include <curses.h>

int main (void) {
    char buf[2],
         *msg = "Now is the time for all good men to come to lunch.";
    WINDOW *w = initscr();

    buf[1] = '\0';
    clear();
    refresh();
    while (*msg != '\0') {
        buf[0] = *msg++; addstr(buf);
        if ((buf[0] == ' ') || (buf[0] == '.')) {
            refresh();
            sleep(1);
        }
    }

    endwin();
    return 0;
}

curses该程序使用然后以单词大小的块输出消息来清除屏幕。

于 2015-09-02T04:56:46.573 回答
0

这个网页:

http://man7.org/linux/man-pages/man4/console_codes.4.html

包含用于处理终端屏幕/光标位置等的常用 ESC 序列

这部分链接信息可能是您想要实现的。

这些转义序列可以放置在用于输出数据/文本的缓冲区的开头

特别感兴趣的是 ESC [ 2 j: 擦除整个屏幕

J   ED        Erase display (default: from cursor to end of display).
                 ESC [ 1 J: erase from start to cursor.
                 ESC [ 2 J: erase whole display.
                 ESC [ 3 J: erase whole display including scroll-back
                            buffer (since Linux 3.0).
于 2015-09-03T04:44:51.307 回答