Использование команды "CLS" в C вызывает мерцание экрана
Я пытаюсь очистить консоль каждый раз, когда я собираюсь printf
что-то в этом (среда Windows с компилятором GCC). Я использую CygWin, и единственный способ, которым я смог сделать это, был с system("cmd /c cls");
, Это работает нормально, но заставляет экран мигать в течение доли секунды, что явно раздражает.
Есть ли альтернативный способ очистки экрана консоли?
2 ответа
Первое, что я хотел бы сделать, это перестать использовать cmd
сделать это. CygWin, предполагая, что вы работаете где-то внутри оболочки, а не консоли 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()
а также 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;
}
Эта программа очищает экран с помощью curses
затем выводит сообщение кусками размером в слово.
Эта веб-страница:
http://man7.org/linux/man-pages/man4/console_codes.4.html
содержит общие последовательности ESC для обработки экрана терминала / положения курсора и т. д.
эта часть связанной информации, вероятно, то, что вы хотите реализовать.
Эти escape-последовательности могут быть помещены в начало буфера, который вы используете для вывода ваших данных / текста
Особый интерес представляет 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).