Как в названии. Как очистить консоль в C ++?
c++
windows
console-application
dev-c++
Томас Б.
источник
источник
Ответы:
Для чистого C ++
Вы не можете. В C ++ даже нет концепции консоли.
Программа может печатать на принтере, выводить прямо в файл или перенаправляться на вход другой программы во всем, что ей нужно. Даже если бы вы могли очистить консоль на C ++, это сделало бы эти случаи значительно более беспорядочными.
См. Эту запись в FAQ по comp.lang.c ++:
Для ОС
Если все еще имеет смысл очистить консоль в вашей программе, и вас интересуют решения для конкретной операционной системы, они действительно существуют.
Для Windows (как в вашем теге) перейдите по этой ссылке:
Изменить: этот ответ ранее упоминался с использованием
system("cls");
, потому что Microsoft сказала это сделать. Однако в комментариях было указано, что это небезопасно . Я удалил ссылку на статью Microsoft из-за этой проблемы.Библиотеки (несколько портативные)
ncurses - это библиотека, которая поддерживает манипуляции с консолью:
источник
system
, и добавил ссылку на вашу статью, объясняющую, почему.Для 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
для этого просто некрасиво.источник
echo
viasystem()
вместо записи в stdout.system()
- распространенная ошибка. То же самое и ваш предлагаемый метод для Unices. Это то, что нужно делать в системах POSIX. Вы правильно поняли часть Win32, хотя и не включили соглашение о «обратной прокрутке».Для Linux / Unix и, возможно, некоторых других, но не для Windows до 10 TH2:
printf("\033c");
сбросит терминал.
источник
Для меня это самый простой способ без необходимости изобретать велосипед.
void Clear() { #if defined _WIN32 system("cls"); #elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__) system("clear"); #elif defined (__APPLE__) system("clear"); #endif }
источник
вывод нескольких строк в оконную консоль бесполезен ... он просто добавляет к нему пустые строки. к сожалению, способ специфичен для Windows и включает либо 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" ) ); }
источник
// #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; }
источник
Чтобы очистить экран, вам сначала нужно включить модуль:
#include <stdlib.h>
это импортирует команды Windows. Затем вы можете использовать «системную» функцию для запуска пакетных команд (которые редактируют консоль). В Windows на C ++ команда для очистки экрана будет следующей:
system("CLS");
И это очистит консоль. Весь код будет выглядеть так:
#include <iostream> #include <stdlib.h> using namespace std; int main() { system("CLS"); }
И это все, что вам нужно! Удачи :)
источник
stdlib.h
он определен стандартом C и не имеет ничего общего ни с «импортом команд Windows», ни с самой Windows. Если не считать этих придирок, все в порядке.В Windows:
#include <cstdlib> int main() { std::system("cls"); return 0; }
В Linux / Unix:
#include <cstdlib> int main() { std::system("clear"); return 0; }
источник
Используйте
system("cls")
для очистки экрана:#include <stdlib.h> int main(void) { system("cls"); return 0; }
источник
Это сложно сделать на MAC, поскольку у него нет доступа к функциям Windows, которые могут помочь очистить экран. Лучшее решение - зациклить и добавить строки, пока терминал не очистится, а затем запустить программу. Однако это не так эффективно и не так удобно для памяти, если вы используете это в первую очередь и часто.
void clearScreen(){ int clear = 5; do { cout << endl; clear -= 1; } while (clear !=0); }
источник
В Windows у нас есть несколько вариантов:
clrscr () (Заголовочный файл: conio.h)
system ("cls") (Заголовочный файл: stdlib.h)
В Linux используйте system ("clear") (заголовочный файл: stdlib.h)
источник
Вот простой способ сделать это:
#include <iostream> using namespace std; int main() { cout.flush(); // Flush the output stream system("clear"); // Clear the console with the "system" function }
источник
Используйте System :: Console :: Clear ();
Это очистит (опустошит) буфер
источник
#include <cstdlib> void cls(){ #if defined(_WIN32) //if windows system("cls"); #else system("clear"); //if other #endif //finish
}
Просто вызовите cls () где угодно
источник
Вы можете использовать метод очистки консоли операционной системы через system ("");
для окон это будет система ("cls"); например,
и вместо выпуска трех разных кодов для разных операционных систем. просто создайте метод, чтобы узнать, какая ОС работает.
вы можете сделать это, определив, существуют ли уникальные системные переменные с помощью #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 }
источник
редактировать: полностью переделанный вопрос
Просто проверьте, в какой системе они находятся, и отправьте системную команду в зависимости от системы. хотя это будет установлено во время компиляции
#ifdef __WIN32 system("cls"); #else system("clear"); // most other systems use this #endif
Это совершенно новый метод!
источник
cout
могли быть перенаправлены в файл. Тогда вообще нет концепции консоли.используйте: clrscr ();
#include <iostream> using namespace std; int main() { clrscr(); cout << "Hello World!" << endl; return 0; }
источник
Самый простой способ - это многократно сбрасывать поток (в идеале больше, чем любая возможная консоль). 1024 * 1024, вероятно, размер, который никогда не может быть в окне консоли.
int main(int argc, char *argv) { for(int i = 0; i <1024*1024; i++) std::cout << ' ' << std::endl; return 0; }
Единственная проблема с этим - программный курсор; эта мигающая вещь (или немигающая вещь) в зависимости от платформы / консоли будет находиться в конце консоли, а не в ее верхней части. Однако, надеюсь, это никогда не вызовет никаких проблем.
источник