Como no título. Como posso limpar o console em C ++?
c++
windows
console-application
dev-c++
Thomas B
fonte
fonte
Respostas:
Para C ++ puro
Você não pode. C ++ nem mesmo tem o conceito de console.
O programa pode estar imprimindo em uma impressora, emitindo diretamente para um arquivo ou sendo redirecionado para a entrada de outro programa para todos os cuidados. Mesmo se você pudesse limpar o console em C ++, tornaria esses casos significativamente mais confusos.
Veja esta entrada no comp.lang.c ++ FAQ:
Específico do sistema operacional
Se ainda fizer sentido limpar o console em seu programa e você estiver interessado em soluções específicas do sistema operacional, elas existem.
Para Windows (como em sua tag), verifique este link:
Edit: Esta resposta mencionada anteriormente usando
system("cls");
, porque a Microsoft disse para fazer isso. No entanto, foi apontado nos comentários que isso não é uma coisa segura a se fazer . Removi o link para o artigo da Microsoft devido a esse problema.Bibliotecas (um tanto portáteis)
ncurses é uma biblioteca que oferece suporte à manipulação de console:
fonte
system
e adicionou um link ao seu artigo explicando o porquê.Para Windows, por meio da API do console:
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); }
Felizmente, ele ignora todos os erros possíveis, mas hey, é a limpeza do console. Não como
system("cls")
lida melhor com erros.Para * nixes, você geralmente pode usar códigos de escape ANSI, então seria:
void clear() { // CSI[2J clears screen, CSI[H moves the cursor to top-left corner std::cout << "\x1B[2J\x1B[H"; }
Usar
system
para isso é simplesmente feio.fonte
echo
via emsystem()
vez de escrever para stdout.system()
é um erro comum. Da mesma forma, é o seu método sugerido para Unices. Isso é o que se deve fazer em sistemas POSIX. Você acertou a parte do Win32, embora não tenha incorporado a convenção de "rolar para trás".Para Linux / Unix e talvez alguns outros, mas não para Windows antes de 10 TH2:
printf("\033c");
irá reiniciar o terminal.
fonte
A maneira mais fácil para mim sem ter que reinventar a roda.
void Clear() { #if defined _WIN32 system("cls"); //clrscr(); // including header file : conio.h #elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__) system("clear"); //std::cout<< u8"\033[2J\033[1;1H"; //Using ANSI Escape Sequences #elif defined (__APPLE__) system("clear"); #endif }
#include <conio.h> clrscr();
std::cout<< u8"\033[2J\033[1;1H";
fonte
TERM environment variable not set.
enviar várias linhas para o console da janela é inútil ... ele apenas adiciona linhas vazias a ele. infelizmente, o modo é específico do Windows e envolve conio.h (e clrscr () pode não existir, também não é um cabeçalho padrão) ou o método 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 ); }
Para o sistema POSIX é muito mais simples, você pode usar ncurses ou funções de terminal
#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" ) ); }
fonte
// #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; }
fonte
Para limpar a tela, você primeiro precisa incluir um módulo:
#include <stdlib.h>
isso importará os comandos do Windows. Depois, você pode usar a função 'sistema' para executar comandos em lote (que editam o console). No Windows em C ++, o comando para limpar a tela seria:
system("CLS");
E isso limparia o console. Todo o código ficaria assim:
#include <iostream> #include <stdlib.h> using namespace std; int main() { system("CLS"); }
E isso é tudo que você precisa! Boa sorte :)
fonte
stdlib.h
é especificado pelo padrão C e não tem nada a ver com "importação de comandos do Windows" nem com o próprio Windows. Exceto por detalhes, você está bem.No Windows:
#include <cstdlib> int main() { std::system("cls"); return 0; }
Em Linux / Unix:
#include <cstdlib> int main() { std::system("clear"); return 0; }
fonte
Isso é difícil de fazer no MAC visto que não tem acesso às funções do Windows que podem ajudar a limpar a tela. Minha melhor solução é fazer um loop e adicionar linhas até que o terminal esteja limpo e, em seguida, executar o programa. No entanto, isso não é tão eficiente ou de memória amigável se você usar principalmente e com freqüência.
void clearScreen(){ int clear = 5; do { cout << endl; clear -= 1; } while (clear !=0); }
fonte
Use
system("cls")
para limpar a tela:#include <stdlib.h> int main(void) { system("cls"); return 0; }
fonte
No Windows, temos várias opções:
clrscr () (arquivo de cabeçalho: conio.h)
sistema ("cls") (arquivo de cabeçalho: stdlib.h)
No Linux, use system ("clear") (arquivo de cabeçalho: stdlib.h)
fonte
Esta é uma maneira simples de fazer isso:
#include <iostream> using namespace std; int main() { cout.flush(); // Flush the output stream system("clear"); // Clear the console with the "system" function }
fonte
Use System :: Console :: Clear ();
Isso irá limpar (esvaziar) o buffer
fonte
#include <cstdlib> void cls(){ #if defined(_WIN32) //if windows system("cls"); #else system("clear"); //if other #endif //finish
}
Basta chamar cls () em qualquer lugar
fonte
Você pode usar o método de console claro do sistema operacional via sistema ("");
para windows seria system ("cls"); por exemplo, em
vez de liberar três códigos diferentes para sistemas operacionais diferentes. basta fazer um método para obter o que o sistema operacional está executando.
você pode fazer isso detectando se existem variáveis de sistema exclusivas com #ifdef,
por exemplo
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 }
fonte
editar: pergunta completamente refeita
Basta testar em qual sistema eles estão e enviar um comando de sistema dependendo do sistema. embora isso seja definido em tempo de compilação
#ifdef __WIN32 system("cls"); #else system("clear"); // most other systems use this #endif
Este é um método completamente novo!
fonte
cout
pode ter sido redirecionado para um arquivo. Então não há conceito de console.use: clrscr ();
#include <iostream> using namespace std; int main() { clrscr(); cout << "Hello World!" << endl; return 0; }
fonte
A maneira mais fácil seria liberar o fluxo várias vezes (de preferência maior do que qualquer console possível). 1024 * 1024 é provavelmente um tamanho que nenhuma janela de console poderia ter.
int main(int argc, char *argv) { for(int i = 0; i <1024*1024; i++) std::cout << ' ' << std::endl; return 0; }
O único problema com isso é o cursor do software; aquela coisa piscando (ou não piscando) dependendo da plataforma / console estará no final do console, oposto ao topo dele. No entanto, isso nunca deve induzir qualquer problema, espero.
fonte