Как очистить экран с помощью \ x1b [2j?

Как мы реализуем clrscr() ? В результате я обнаружил, что \x1b[2j можно использовать для очистки экрана, но как мы его используем?

Стандартная библиотека C не обеспечивает способ очистки экрана. Для этого вам нужна библиотека, зависящая от операционной системы.

В DOS и Windows для программы, запущенной на консоли DOS или Windows, вы можете использовать расширения DOS / Windows, поставляемые в основной библиотеке C, поставляемой с ОС:

 #include  clrscr(); 

В Unix-системах вы можете использовать библиотеку curses, которая предоставляется с ОС. Порты библиотеки проклятий существуют для большинства операционных систем, в том числе для Windows, так что это путь в переносную программу. Свяжите свою программу с помощью -lcurses и используйте

 #include  erase(); 

Некоторые терминалы и терминальные эмуляторы выполняют специальные функции, такие как очистка экрана, когда они получают escape-последовательность. Большинство терминалов соответствуют стандарту ANSI, который определяет несколько управляющих последовательностей; "\x1b[2J" – такая последовательность, и ее эффект заключается в очистке экрана. Обратите внимание на капитал J На таком терминале fputs("\x1b[2J", stdout) очищает экран. Это то, что делает библиотека curses при вызове erase() на таком терминале; библиотека curses включает в себя базу данных типов терминалов и какие escape-последовательности для использования на разных типах.

Если вы уверены, что это последовательность управления, которую вам нужно использовать, тогда:

 #include  int main(void) { fputs("\x1b[2j", stdout); return(0); } 

Это преднамеренно пропускает новую строку – но вам может быть лучше, если добавить один после «j». Однако, как указывает Жиль в своем ответе , есть другие способы сделать это, которые имеют достоинства по сравнению с этим решением.

В Windows вы можете попробовать

 #include  #include  #include  void clrscr(void) { HANDLE std_out = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO cbi; COORD origin = {0,0}; int buf_length; GetConsoleScreenBufferInfo(std_out,&cbi); buf_length = cbi.dwSize.X*cbi.dwSize.Y; FillConsoleOutputCharacter(std_out,0x20,buf_length,origin,0); FillConsoleOutputAttribute(std_out,0x07,buf_length,origin,0); } int _tmain(int argc, wchar_t *argv[], wchar_t *envp[]) { DWORD i; _tprintf(TEXT("Clear screen probe...\n")); clrscr(); return 0; } 

“\ x1b [H \ x1b [2J” работает на OSX.