Перейти к содержимому

Как очистить консоль в с

  • автор:

Очистка экрана

Существует три способа очистки экрана в консольном приложении.

Пример 1

Это рекомендуемый метод, использующий последовательности виртуальных терминалов для всех новых разработок. Дополнительные сведения см. в обсуждении классических ИНТЕРФЕЙСов API консоли и последовательностей виртуальных терминалов.

Первый метод — настроить приложение для последовательностей выходных данных виртуального терминала, а затем вызвать команду «очистить экран».

#include int main(void) < HANDLE hStdOut; hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); // Fetch existing console mode so we correctly add a flag and not turn off others DWORD mode = 0; if (!GetConsoleMode(hStdOut, &mode)) < return ::GetLastError(); >// Hold original mode to restore on exit to be cooperative with other command-line apps. const DWORD originalMode = mode; mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; // Try to set the mode. if (!SetConsoleMode(hStdOut, mode)) < return ::GetLastError(); >// Write the sequence for clearing the display. DWORD written = 0; PCWSTR sequence = L"\x1b[2J"; if (!WriteConsoleW(hStdOut, sequence, (DWORD)wcslen(sequence), &written, NULL)) < // If we fail, try to restore the mode on the way out. SetConsoleMode(hStdOut, originalMode); return ::GetLastError(); >// To also clear the scroll back, emit L"\x1b[3J" as well. // 2J only clears the visible window and 3J only clears the scroll back. // Restore the mode on the way out to be nice to other command-line applications. SetConsoleMode(hStdOut, originalMode); return 0; > 

Дополнительные варианты этой команды можно найти в документации по последовательности виртуальных терминалов в разделе «Удаление в дисплее«.

Пример 2

Второй метод — написать функцию, чтобы прокрутить содержимое экрана или буфера и задать заливку для обнаруженного пространства.

Это соответствует поведению командной строки cmd.exe .

#include void cls(HANDLE hConsole) < CONSOLE_SCREEN_BUFFER_INFO csbi; SMALL_RECT scrollRect; COORD scrollTarget; CHAR_INFO fill; // Get the number of character cells in the current buffer. if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) < return; >// Scroll the rectangle of the entire buffer. scrollRect.Left = 0; scrollRect.Top = 0; scrollRect.Right = csbi.dwSize.X; scrollRect.Bottom = csbi.dwSize.Y; // Scroll it upwards off the top of the buffer with a magnitude of the entire height. scrollTarget.X = 0; scrollTarget.Y = (SHORT)(0 - csbi.dwSize.Y); // Fill with empty spaces with the buffer's default text attribute. fill.Char.UnicodeChar = TEXT(' '); fill.Attributes = csbi.wAttributes; // Do the scroll ScrollConsoleScreenBuffer(hConsole, &scrollRect, NULL, scrollTarget, &fill); // Move the cursor to the top left corner too. csbi.dwCursorPosition.X = 0; csbi.dwCursorPosition.Y = 0; SetConsoleCursorPosition(hConsole, csbi.dwCursorPosition); > int main(void)

Пример 3

Третий метод — написать функцию для программного очистки экрана с помощью функций FillConsoleOutputCharacter и FillConsoleOutputAttribute.

В следующем примере кода демонстрируется этот метод.

#include void cls(HANDLE hConsole) < COORD coordScreen = < 0, 0 >; // home for the cursor DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD dwConSize; // Get the number of character cells in the current buffer. if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) < return; >dwConSize = csbi.dwSize.X * csbi.dwSize.Y; // Fill the entire screen with blanks. if (!FillConsoleOutputCharacter(hConsole, // Handle to console screen buffer (TCHAR)' ', // Character to write to the buffer dwConSize, // Number of cells to write coordScreen, // Coordinates of first cell &cCharsWritten)) // Receive number of characters written < return; >// Get the current text attribute. if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) < return; >// Set the buffer's attributes accordingly. if (!FillConsoleOutputAttribute(hConsole, // Handle to console screen buffer csbi.wAttributes, // Character attributes to use dwConSize, // Number of cells to set attribute coordScreen, // Coordinates of first cell &cCharsWritten)) // Receive number of characters written < return; >// Put the cursor at its home coordinates. SetConsoleCursorPosition(hConsole, coordScreen); > int main(void)

Как очистить консоль в с

какие еще есть способы очистки консоли кроме
system(«cls»); // уж очень медленно работает
работаю под виндой, но желательно общее решение

24.09.07 04:35: Перенесено модератором из ‘C/C++’ — Павел Кузнецов
Re: очистить консоль

От: sch
Дата: 22.09.07 16:55
Оценка:

Здравствуйте, Socket, Вы писали:

S>какие еще есть способы очистки консоли кроме
S>system(«cls»); // уж очень медленно работает
S>работаю под виндой, но желательно общее решение

Портабельного стандартного способа нету, можно поискать разве что кроссплатформенные библиотеки.
Под Windows копать стоит в сторону http://msdn2.microsoft.com/en-us/library/ms682073.aspx

Re: очистить консоль

От: _nn_ www.nemerleweb.com
Дата: 22.09.07 21:42
Оценка:

Здравствуйте, Socket, Вы писали:

S>какие еще есть способы очистки консоли кроме
S>system(«cls»); // уж очень медленно работает
S>работаю под виндой, но желательно общее решение

Как вариант напечатать 25 пустых строк

Re[2]: очистить консоль

От: Sergey Chadov
Дата: 23.09.07 08:05
Оценка:

Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Socket, Вы писали:

S>>какие еще есть способы очистки консоли кроме
S>>system(«cls»); // уж очень медленно работает
S>>работаю под виндой, но желательно общее решение

__>Как вариант напечатать 25 пустых строк

Не, не вариант. консоль не обязана быть 80х25

Re: очистить консоль

От: __c0d0__
Дата: 23.09.07 08:59
Оценка:

Здравствуйте, Socket, Вы писали:

S>какие еще есть способы очистки консоли кроме
S>system(«cls»); // уж очень медленно работает
S>работаю под виндой, но желательно общее решение

Общего решения точно нет, так как работа с консолью, например в Linux или в Windows, организована по разному.
Для Windows=

1/ CreateConsoleScreenBuffer — создает экранный буфер
2/ SetConsoleActiveScreenBuffer — делает его активным
3/ GetConsoleScreenBufferInfo — информация о окне консоли
4/ ReadConsoleInput/WriteConsoleInput/ReadConsoleOutput/WriteConsoleOutput — работаем с консолью

Экранных буферов может быть столько, сколько Вам потребуется.

Алгоритм прост: очищаем неактивный экранный буфер, затем делаем его активным.

Re: очистить консоль

От: _nikita_ http://www.regarena.ru
Дата: 24.09.07 05:55
Оценка:

Здравствуйте, Socket, Вы писали:

S>какие еще есть способы очистки консоли кроме
S>system(«cls»); // уж очень медленно работает
S>работаю под виндой, но желательно общее решение

printf("\f")

Учение свет, а неучение — чуть свет и на работу.

Re: очистить консоль

От: CreatorCray
Дата: 24.09.07 06:14
Оценка:

Здравствуйте, Socket, Вы писали:

S>какие еще есть способы очистки консоли кроме
S>system(«cls»); // уж очень медленно работает
S>работаю под виндой, но желательно общее решение

void ClearConsole () < HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD written; COORD zeroPos = ; if (GetConsoleScreenBufferInfo (consoleHandle, &csbi)) < DWORD numChars = csbi.dwSize.X * csbi.dwSize.Y; FillConsoleOutputCharacter (consoleHandle, ' ', numChars, zeroPos, &written); FillConsoleOutputAttribute (consoleHandle, csbi.wAttributes, numChars, zeroPos, &written); > SetConsoleCursorPosition (consoleHandle, zeroPos); >

Re: очистить консоль

От: Кодт
Дата: 24.09.07 11:38
Оценка:

Здравствуйте, Socket, Вы писали:

S>работаю под виндой, но желательно общее решение

Как очистить консоль C#?

Наберите Console, поставьте точку, Visual Studio выдаст список доступных методов, просто просмотрите его. Так можно решить 90% вопросов подобных этому.

19 апр 2017 в 19:55

А за что минусы? Нормальный новичковый вопрос.

19 апр 2017 в 22:08

@VladD подозреваю, что минус за нежелание ткнуть кнопочку F1 или просто зайти на страницу описания используемого класса. Плюс конечно тоже ставить не за что, но беда в том, что в MSDN далеко не все описано правильно, и еще меньше правильно переведено на русский, автоперевод, чтоб его, лучше бы, как раньше, студенты переводили, хоть с ошибками, зато по смыслу процентов на 70 верно, в большинстве случаев.

19 апр 2017 в 23:32

@NicolasChabanovsky ок, попробую

unixforum.org

Самый простой способ, еще с паскаля, это напечатать пустых строчек, штук 200 для надежности.
А вообще. без какой то либы не обойтись.

Если жизнь твоя порвется, тебе новую сошьют.
Спасибо сказали:
eugrus Сообщения: 179

Re: очистка консоли C

Сообщение eugrus » 03.01.2005 12:55

(demongloom @ Понедельник, 03 Января 2005, 6:41) писал(а): Самый простой способ, еще с паскаля, это напечатать пустых строчек, штук 200 для надежности.
А вообще. без какой то либы не обойтись.

в curces.h точно есть!
только не помню где

а вобще я щас подумал вот что:

#include void main()

сейчас буду проверять

Спасибо сказали:
Ananas Сообщения: 64

Re: очистка консоли C

Сообщение Ananas » 06.01.2005 14:49

echo -ne ‘\e[0d\e[2J’ — для скриптов
printf («\033[0d\033[2J»); — для С
Спасибо сказали:
nercus Сообщения: 150

Re: очистка консоли C

Сообщение nercus » 06.01.2005 21:34

Еще полезная ссылочка http://opennet.ru/base/dev/console_ctl.txt.html. чего только не найдешь в bookmarks:)

2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
webdeveloper Сообщения: 13

Re: очистка консоли C

(eugrus @ Суббота, 01 Января 2005, 2:38) писал(а): как полность очистить консоль от текста?

предпологаю это можно решить какой-то функцией из библиотеки ncurces — подскажите pls

А как в windows clrscr() который в библиотеке conio.h не будет работать?
Спасибо сказали:
eugrus Сообщения: 179

Re: очистка консоли C

Сообщение eugrus » 07.01.2005 12:57

А как в windows clrscr() который в библиотеке conio.h не будет работать?

по идеи conio.h это вобще досовская библиотека

использование её функций даже под виндой не реккомендуется

в gcc её вобще нет (хотя в bcc для *nix включили)

вобщем решение уже найдено:

это как я делал в начале system(«clear») или как подсказал Ananas (спасибо ему за это ) printf(«\033[0d\033[2J»)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *