在C中使用“CLS”命令会导致屏幕闪烁

时间:2015-09-02 04:50:05

标签: c cygwin cls

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

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

2 个答案:

答案 0 :(得分:1)

我要做的第一件事是停止使用Red, Green and Blue 来执行此操作。 CygWin,假设你在shell中的某个地方运行而不是在Windows控制台上运行,那么就有一个" native"选项,您可以使用以下任一项:

cmd

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

因此,在CygWin中运行的程序中,您可以通过简单的方式清除屏幕:

cmd

当然,如果您不想运行任何外部可执行文件,则可以使用system("clear"); 实现相同目的。举例来说,以下程序为您清除屏幕(确保在编译命令的末尾包含curses):

-lcurses
不要因为它退出后恢复这一事实而感到不知所措,你不会将这个程序用作屏幕清除独立的东西。相反,这些陈述将在#include <curses.h> int main (void) { WINDOW *w = initscr(); clear(); refresh(); sleep(2); endwin(); return 0; } initscr()来电之间合并到您自己的计划中,例如:

endwin()

此程序使用#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; } 清除屏幕,然后以字大小的块输出消息。

答案 1 :(得分: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).
相关问题