Как и в названии. Как очистить консоль на С++?
Как очистить консоль
Ответ 1
Для чистого C++
Ты не можешь C++ даже не имеет понятия консоли.
Программа может печатать на принтере, выводить прямо в файл или перенаправлять на вход другой программы, несмотря на все заботы. Даже если бы вы могли очистить консоль в C++, это значительно усложнило бы эти случаи.
Смотрите эту запись в comp.lang. C++ FAQ:
OS-Specific
Если по-прежнему имеет смысл очистить консоль в вашей программе и вас интересуют конкретные решения для операционной системы, они существуют.
Для Windows (как в вашем теге), проверьте эту ссылку:
Изменение: Этот ответ ранее упоминалось с использованием system("cls");
, потому что Microsoft сказала, чтобы сделать это. Однако в комментариях было отмечено, что это небезопасно делать. Из-за этой проблемы я удалил ссылку на статью Microsoft.
Библиотеки (несколько портативные)
ncurses - это библиотека, которая поддерживает манипуляции с консолью:
- http://www.gnu.org/software/ncurses/ (работает в системах Posix)
- http://gnuwin32.sourceforge.net/packages/ncurses.htm (несколько старый порт Windows)
Ответ 2
Для Windows через API консоли:
void clear() {
COORD topLeft = { 0, 0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console, &screen);
FillConsoleOutputCharacterA(
console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
FillConsoleOutputAttribute(
console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
SetConsoleCursorPosition(console, topLeft);
}
Он с радостью игнорирует все возможные ошибки, но, эй, это консольная очистка. Не похоже, что system("cls")
лучше справляется с ошибками.
Для * nixes вы обычно можете использовать escape-коды ANSI, поэтому это будет:
void clear() {
// CSI[2J clears screen, CSI[H moves the cursor to top-left corner
std::cout << "\x1B[2J\x1B[H";
}
Использование system
для этого просто уродливо.
Ответ 3
Для Linux/Unix и, возможно, для некоторых других, но не для Windows до 10 TH2:
printf("\033c");
будет reset терминал.
Ответ 4
вывод нескольких строк в консоль окон бесполезен. Он просто добавляет к нему пустые строки. к сожалению, путь относится к конкретным окнам и включает либо conio.h(и clrscr() может не существовать, это не стандартный заголовок), либо метод Win API
#include <windows.h>
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;
/* Move the cursor home */
SetConsoleCursorPosition( hStdOut, homeCoords );
}
Для системы POSIX это проще, вы можете использовать ncurses или терминальные функции
#include <unistd.h>
#include <term.h>
void ClearScreen()
{
if (!cur_term)
{
int result;
setupterm( NULL, STDOUT_FILENO, &result );
if (result <= 0) return;
}
putp( tigetstr( "clear" ) );
}
Ответ 5
// #define _WIN32_WINNT 0x0500 // windows >= 2000
#include <windows.h>
#include <iostream>
using namespace std;
void pos(short C, short R)
{
COORD xy ;
xy.X = C ;
xy.Y = R ;
SetConsoleCursorPosition(
GetStdHandle(STD_OUTPUT_HANDLE), xy);
}
void cls( )
{
pos(0,0);
for(int j=0;j<100;j++)
cout << string(100, ' ');
pos(0,0);
}
int main( void )
{
// write somthing and wait
for(int j=0;j<100;j++)
cout << string(10, 'a');
cout << "\n\npress any key to cls... ";
cin.get();
// clean the screen
cls();
return 0;
}
Ответ 6
Чтобы очистить экран, вам сначала необходимо включить модуль:
#include <stdlib.h>
это будет импортировать команды Windows. Затем вы можете использовать функцию "system" для запуска командных команд (которые редактируют консоль). В Windows на С++ команда очистки экрана:
system("CLS");
И это очистит консоль. Весь код будет выглядеть так:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
system("CLS");
}
И это все, что вам нужно! Goodluck:)
Ответ 7
В Windows:
#include <cstdlib>
int main() {
std::system("cls");
return 0;
}
В Linux/Unix:
#include <cstdlib>
int main() {
std::system("clear");
return 0;
}
Ответ 8
Это ДЕЙСТВИТЕЛЬНО изменчиво, но попробуйте:
void cls() {
for (int i = 0; i < 250; ++i) {
std::cout << endl;
}
}
Ответ 9
Используйте system("cls")
, чтобы очистить экран:
#include <stdlib.h>
int main(void)
{
system("cls");
return 0;
}
Ответ 10
Это трудно сделать при просмотре MAC, поскольку он не имеет доступа к функциям Windows, которые могут помочь очистить экран. Мое лучшее исправление заключается в цикле и добавлении строк до тех пор, пока терминал не станет ясным, а затем запустите программу. Однако это не так эффективно или полезно для памяти, если вы используете это в первую очередь и часто.
void clearScreen(){
int clear = 5;
do {
cout << endl;
clear -= 1;
} while (clear !=0);
}
Ответ 11
Самый простой способ для меня без необходимости изобретать велосипед.
void Clear()
{
#if defined _WIN32
system("cls");
#elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__)
system("clear");
#elif defined (__APPLE__)
system("clear");
#endif
}
Ответ 12
Вот простой способ сделать это:
#include <iostream>
using namespace std;
int main()
{
cout.flush(); // Flush the output stream
system("clear"); // Clear the console with the "system" function
}
Ответ 13
В Windows у нас есть несколько вариантов:
clrscr() (заголовочный файл: conio.h)
system ("cls") (заголовочный файл: stdlib.h)
В Linux используйте system ("очистить") (заголовочный файл: stdlib.h)
Ответ 14
Использовать System:: Console:: Clear();
Это очистит (пуст) буфер
Ответ 15
#include <cstdlib>
void cls(){
#if defined(_WIN32) //if windows
system("cls");
#else
system("clear"); //if other
#endif //finish
}
Просто вызов cls() в любом месте
Ответ 16
edit: полностью переделанный вопрос
Просто проверьте, в какой системе они включены, и отправьте системную команду в зависимости от системы. хотя это будет установлено во время компиляции
#ifdef __WIN32
system("cls");
#else
system("clear"); // most other systems use this
#endif
Это совершенно новый метод!
Ответ 17
С помощью системы ("") можно использовать метод очистки консоли операционной системы;
для окон это будет система ( "cls" ); например
и вместо того, чтобы выпускать три разных кода для разных операционных систем. просто создайте способ получения того, что работает os.
Вы можете сделать это, обнаружив, существуют ли уникальные системные переменные С#ifdef
например.
enum OPERATINGSYSTEM = {windows = 0, mac = 1, linux = 2 /*etc you get the point*/};
void getOs(){
#ifdef _WIN32
return OPERATINGSYSTEM.windows
#elif __APPLE__ //etc you get the point
#endif
}
int main(){
int id = getOs();
if(id == OPERATINGSYSTEM.windows){
system("CLS");
}else if (id == OPERATINGSYSTEM.mac){
system("CLEAR");
} //etc you get the point
}
Ответ 18
use: clrscr();
#include <iostream>
using namespace std;
int main()
{
clrscr();
cout << "Hello World!" << endl;
return 0;
}
Ответ 19
Самый простой способ - очистить поток несколько раз (в идеале больше, чем любая возможная консоль). 1024 * 1024, вероятно, размер, который не может быть консольным.
int main(int argc, char *argv)
{
for(int i = 0; i <1024*1024; i++)
std::cout << ' ' << std::endl;
return 0;
}
Единственная проблема с этим - программный курсор; эта мигающая вещь (или не мигающая вещь) в зависимости от платформы/консоли будет в конце консоли, против нее. Однако это никогда не должно вызывать никаких проблем.