Como limpar a tela em C

Publicado por Ricardo Rodrigues Lucca em 19/06/2003

[ Hits: 95.338 ]

Blog: http://aventurasdeumdevop.blogspot.com.br/

 


Como limpar a tela em C



Olá!

Muitas vezes me perguntei como limpar a tela do console do Linux e dificilmente conseguia algum resultado. Depois, de algum tempo procurando na internet cheguei a um pequeno truque usando o printf, que tem a mesma função de limpar a tela.

Ao se usar uma dessas linhas a tela será limpa:

printf("\e[H\e[2J");
ou
printf("\33[H\33[2J");

Segue um programa de exemplo:

#include <stdio.h>

void main(void)
{
     printf("\e[H\e[2J");
     printf("Olá mundo!\n");
}

Até a próxima!

Outras dicas deste autor

Achando comandos no console com "!" e "?"

Medir Tempo

WorkShop: Instalação do Red Hat Linux

Ligando o NumLock na abertura do KDE

Pérolas do desconhecido, comandos não tão conhecidos que podem ser úteis

Leitura recomendada

Mais uma dica de curso de C e C++

Fatorial usando recursividade

Instalando a biblioteca libxml2

Switch em C, e se a opção for inválida?

Programação para Arduino

  

Comentários
[1] Comentário enviado por gustavo_marcon em 20/06/2003 - 18:45h

Acho que c/ a função system("clear") a tela limpa também

[2] Comentário enviado por mrluk em 23/06/2003 - 12:59h

isso q eu ia perguntar, isso tudo é pra fazer a mesma coisa que o clear? hehe...

[3] Comentário enviado por JuNiOx em 24/06/2003 - 03:12h

ae, no win eu usava clrscr(), porém, precisa do conio.h ...

já no linux, não existe essa lib... , esse comando system("clear") é idêntico ao clrscr() ou tem diferenças entre eles ?

[4] Comentário enviado por jllucca em 24/06/2003 - 11:22h

eu conhecia o system() para poder usar comandos do sistema operacional. Só que eu prefiro usar
muito mais "comando" do proprio prompt(ou ASCII), pois isso evita a declaração de mais uma unit.
Está certo, no meu caso, que continuo fazendo ainda a declaração de uma "unit". Mas, está é uma
que estou fazendo. Não está tão boa, mas foi o que eu usei para "esquecer" o system(), além disso
a unit que fiz faz jogadas de valor ao mesmo estilo que usei pra limpar a tela só que pra trocar a cor
da fonte. Essa parte da minha unit, chamo ela de tela.h, foi desenvolvida lendo o
bash-prompt-howto. Se quiserem eu posto ela aqui no site pra verem como fico ^^

[5] Comentário enviado por jllucca em 27/06/2003 - 13:10h

Eu postei a biblioteca, eu sei q ninguem pediu... Mas, ela está aqui já:

http://www.vivaolinux.com.br/scripts/verScript.php?codigo=129

[6] Comentário enviado por dr4ck0 em 20/10/2004 - 12:08h

Como funciona essas funcoes de limpar tela... Alguem sabe??

[7] Comentário enviado por Bardo em 22/10/2004 - 15:13h

O system("clear") limpa toda a tela antes de rodar o programa. Ex:

Se no interface texto estiver escrito:

mcedit prog.c
cc prog.c -o prog

Na hora que vc for rodar o prog (./prog) ele irá apagar tudo o mais que estiver escrito no terminal (no exemplo, ele irá limpar a chamada ao mcedit e o comando de compilação). Dá um aspecto mais elegante ao programa!!!

Valew!

[8] Comentário enviado por jllucca em 22/10/2004 - 23:22h

Opa,

realmente obrigado pelo exemplo Bardo. Mas, o dr4ck0 não se referia ao system("clear") e sim aos codigos ANSI(não tenho certeza agora) de terminais que agente pode utilizar para limpar a tela. Seria uma forma mais limpa(mesmo sendo intendivel), se todos os shells o reconhecessem(o desatualizado do windows não o reconhece, se quiser um contra exemplo). Assim, é mais fácil utilizar o system("clear") e quando necessario trocar para system("cls") ou outro comando equivalente.

[]'s

[9] Comentário enviado por jllucca em 04/11/2004 - 16:19h

system(texto) executa o comando do console indicado por texto. Assim, se voce abrir um prompt do msdos e digitar "clear" vai resultar num "comando inexistente"(nem lembro mais da mensagem, sorry). Mas, executando um "cls" ira resultar em limpar a tela. É o comando equivalente ao clear so q no prompt do windows(ou como prefiro dizer no msdos).

[10] Comentário enviado por Bardo em 04/11/2004 - 17:45h

Valew, mas olha só pra que serve esse system("cls")?

[11] Comentário enviado por hunz em 10/12/2004 - 19:07h

jlluca, dei uma lida nas manpages do console_codes e notei que há uma maneira mais simples de fazer isso:
printf("{COMENTARIO}33[2J");

Abraços,
Fiquem com Deus.

[12] Comentário enviado por jochan em 14/12/2005 - 14:42h

Muito legal, vai me ajudar bastente no meu projeto de C++ ... =)

[13] Comentário enviado por luisferpa em 04/03/2006 - 19:28h

muito bacaca a dica, vou testar ... vlw

[14] Comentário enviado por removido em 02/05/2006 - 16:39h

Com a função system("clear"); a tela tmbm fica limpah..
é como digitar clear na console****

[15] Comentário enviado por packetspy em 14/11/2006 - 19:47h

O codigo proposto não funciona....
O correto seria assim:

#include<stdio.h>
main()
{
printf("\e[H\e[2J");
printf("Ola mundo ");
}

Abraços !!!

[16] Comentário enviado por cacjorge em 14/05/2007 - 16:52h

uma pequena dica,

usem system("clear || cls");

ai funciona tanto em linux como no windows ;]


[17] Comentário enviado por SithTux em 25/05/2007 - 11:44h

Isso relsolveu meu problema mas acho o system("clear') bem mais pratico do que esse código ASCII... mas valew pessoal... to iniciando no Linux e to curtindo muito falow

[18] Comentário enviado por f_Candido em 09/07/2007 - 16:51h

Ajudou bastante aqui. Tanto com o código na função printf, quanto, usar a função system.
Vlw

[19] Comentário enviado por gabrield em 19/10/2007 - 10:02h

Legal!

Vai ajudar muito agora em diante...!

Vlw kra!

[20] Comentário enviado por anonimo1234 em 30/03/2008 - 00:21h

Muito boa dica,tava procurando um comando pra fazer isso e não conhecia esse system("cls");

Valeu :)

[21] Comentário enviado por removido em 04/06/2008 - 15:40h

hoje eu estava programando e tive problemas
com o comando system("clear"); tipo que isso não
limpava a tela do console no kate (fedora 8)
ele simplismente baixava a barra de rolagem a ponto que oque
havia acima nao aparecia mais. mas ainda existia. tá certo
isso? sou iniciante. por favor se eu falei besteira,
me desculpem :$ pdoksapokdopsa brigada

[22] Comentário enviado por cytron em 25/04/2011 - 01:17h

Só pro caso de alguém mais passar por aqui pra saber se system("clear") é realmente uma melhor poćão do que queles códigos ANSI...

É claro que não! É terrível usar a system() para limpar a tela, afinal, a funćão system() abre um processo só pra rodar um comando no shell.

Ao invés disso, usar printf() é bem mais leve. Mas ainda existem alternativas mais leves ainda do que usar a funćão printf(), basta criar sua própria funćão de limpar a tela, lembrando que utilizar um laćo pra rodar em um determinado número de linhas não é correto, visto que um terminal pode ter o número de linhas alterados apenas aumentando o tamanho da janela... ou diminuindo. Até mesmo na resolućão.

[23] Comentário enviado por EngNBA em 24/08/2014 - 13:02h

O system("clear") com toda certeza é o melhor e mais facil de lembrar. Mas vale lembrar que ele NAO FUNCIONA se o compilador usado for o g++.
Se voce usar o compilador gcc ele vai funcionar agora o G++ ele dará erro. Entao para o g++ é preferivel usar o que o nosso amigo postou ai "printf("\e[H\e[2J");"



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts