Как очистить экран с помощью \ x1b [2j? - PullRequest
6 голосов
/ 05 сентября 2010

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

Ответы [ 3 ]

6 голосов
/ 05 сентября 2010

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

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

#include <conio.h>
clrscr();

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

#include <curses.h>
erase();

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

3 голосов
/ 05 сентября 2010

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

#include <stdio.h>

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

Это преднамеренно пропускает символ новой строки - но вам лучше добавить один после 'j'. Однако, как указывает Жиль в своем ответе , существуют и другие способы сделать это, которые имеют свои преимущества по сравнению с этим решением.

0 голосов
/ 13 декабря 2012

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

#include <tchar.h>
#include <stdio.h>
#include <windows.h>

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...