在 C 中使用 'CLS' 命令导致屏幕闪烁
Using 'CLS' command in C causes screen blink
每次我要printf
其中的东西(Windows带有GCC编译器的环境)时,我都试图清除我的控制台。我正在使用 CygWin,我唯一能做到的方法是使用 system("cmd /c cls");
。这工作正常,但它会导致屏幕闪烁几分之一秒,这显然很烦人。
是否有其他清除控制台屏幕的方法?
我要做的第一件事就是停止使用 cmd
来做这件事。 CygWin,假设您在 shell 而不是 Windows 控制台中的某个地方 运行ning,它有一个 "native" 选项,您可以使用以下任一选项:
clear
tput clear
清除屏幕,而不调用外部 cmd
解释器。
因此,在 CygWin 中的程序 运行ning 中,您可以使用简单的方法清除屏幕:
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] = '[=13=]';
clear();
refresh();
while (*msg != '[=13=]') {
buf[0] = *msg++; addstr(buf);
if ((buf[0] == ' ') || (buf[0] == '.')) {
refresh();
sleep(1);
}
}
endwin();
return 0;
}
此程序使用 curses
清除屏幕,然后以单词大小的块输出消息。
此网页:
http://man7.org/linux/man-pages/man4/console_codes.4.html
包含用于处理终端 screen/cursor 位置等的常用 ESC 序列
这部分链接信息可能是您想要实现的。
这些转义序列可以放在您用来输出 data/text
的缓冲区的开头
特别感兴趣的是 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).
每次我要printf
其中的东西(Windows带有GCC编译器的环境)时,我都试图清除我的控制台。我正在使用 CygWin,我唯一能做到的方法是使用 system("cmd /c cls");
。这工作正常,但它会导致屏幕闪烁几分之一秒,这显然很烦人。
是否有其他清除控制台屏幕的方法?
我要做的第一件事就是停止使用 cmd
来做这件事。 CygWin,假设您在 shell 而不是 Windows 控制台中的某个地方 运行ning,它有一个 "native" 选项,您可以使用以下任一选项:
clear
tput clear
清除屏幕,而不调用外部 cmd
解释器。
因此,在 CygWin 中的程序 运行ning 中,您可以使用简单的方法清除屏幕:
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] = '[=13=]';
clear();
refresh();
while (*msg != '[=13=]') {
buf[0] = *msg++; addstr(buf);
if ((buf[0] == ' ') || (buf[0] == '.')) {
refresh();
sleep(1);
}
}
endwin();
return 0;
}
此程序使用 curses
清除屏幕,然后以单词大小的块输出消息。
此网页:
http://man7.org/linux/man-pages/man4/console_codes.4.html
包含用于处理终端 screen/cursor 位置等的常用 ESC 序列
这部分链接信息可能是您想要实现的。
这些转义序列可以放在您用来输出 data/text
的缓冲区的开头特别感兴趣的是 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).