Очистка экрана
Существует три способа очистки экрана в консольном приложении.
Пример 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»)