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)
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
}
É interessante você olhar para um trecho de código e constatar, só pela aparência, que esse código é seu.
Isso me deixa ainda mais à vontade para sugerir uma mudança óbvia, que eu não sei como deixei passar quando o enviei para o fórum pela primeira vez (aliás, obrigado, Thihup, por indicar o link em que ele foi postado pela primeira vez; eu mesmo não lembrava dele). A sugestão é trocar o bloco
#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
}
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');
}
4. Obrigado
luimeyerusa Ubuntu
Post recolhido
Enviado em 10/11/2015 - 16:03h
Valeu galera, resolvido.
só mudei o system("cls"); para system("clear");