Thihup
(usa Manjaro Linux)
Enviado em 10/11/2015 - 11:08h
Amigo, o comando 'cls' (assim como o comando 'pause'), são comandos exclusivos do sistema 'Janelas'.
No Linux para limpar a tela utilize o comando
system("clear"); (não recomendável), ou crie uma função igual a esta e chame assim:
#include <stdio.h>
/* E outros includes caso necessite ... */
#ifdef __unix__
# include <unistd.h>
# include <term.h>
#elif defined(_WIN32)
# include <windows.h>
#elif defined(__DOS__) || defined(__MSDOS__)
# include <conio.h>
#endif
void my_cls(void){
#ifdef __unix__
static bool bad_term=false;
if(!bad_term){
// Caso o terminal ainda não tenha sido inicializado, Inicializa-o.
if(!cur_term){
int err_code;
if(setupterm(NULL, STDOUT_FILENO, &err_code)==ERR){
bad_term=true;
goto term_is_bad;
}
}
putp(clear_screen);
return;
}
#elif defined(_WIN32)
static bool bad_console=false;
static HANDLE hConsole=INVALID_HANDLE_VALUE;
if(!bad_console){
if(hConsole==INVALID_HANDLE_VALUE){
hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if(hConsole==INVALID_HANDLE_VALUE){
bad_console=true;
goto term_is_bad;
}
}
static COORD top_left_coord = { 0, 0 };
CONSOLE_SCREEN_BUFFER_INFO screen_info;
DWORD screen_size, n_chars_affected;
WORD current_output_attributes;
// Pega tamanho atual da tela (executa toda vez, pois pode mudar).
if(!GetConsoleScreenBufferInfo(hConsole, &screen_info)){
bad_console=true;
goto term_is_bad;
}
screen_size=screen_info.dwSize.X*screen_info.dwSize.Y;
current_output_attributes=screen_info.wAttributes;
// Enche a tela de espaços e depois muda os atributos.
if(
!FillConsoleOutputCharacter(
hConsole, static_cast<TCHAR>(' '),
screen_size, top_left_coord, &n_chars_affected
) ||
!FillConsoleOutputAttribute(
hConsole, current_output_attributes,
screen_size, top_left_coord, &n_chars_affected
) ||
!SetConsoleCursorPosition(hConsole, top_left_coord)
){
bad_console=true;
goto term_is_bad;
}
return;
}
#elif defined(__DOS__) || defined(__MSDOS__)
clrscr();
#endif
#if !defined(__DOS__) && !defined(__MSDOS__)
term_is_bad:
/*
Tipo de terminal desconhecido ou com erro. "Limpa" a tela
somente pulando uma quantidade razoável de linhas, quiçá
arrastando o texto anterior para fora.
*/
for(int i=0; i<100; i++)
putchar('\n');
#endif
}
/* Outras funções caso necessite... */
int main(){
printf("Hello World\n");
my_cls();
return 0;
}
Fazendo dessa maneira você deixa seu código portável e não requer mudanças nele, apenas recompilar em cada sistema.
Recomendo ler este[1] tópico onde essa função é criada para entender o funcionamento dela.
Espero ter ajudado
Se ajudei, marque o tópico como Resolvido e clique em Melhor Resposta!
Nota: Talvez seja necessário instalar a biblioteca
libncurses5-dev para funcionar do modo correto (
sudo apt-get install libncurses5-dev caso seja derivado do Debian)
[]'s
T+
[1]
http://www.vivaolinux.com.br/topico/C-C++/Preciso-fazer-um-programa-em-C-para-cadastra-alunos-consul...
--
Att,
Thiago Henrique Hüpner
(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)