Limpando o buffer do teclado em C

Publicado por Emilio Santiago em 21/12/2003

[ Hits: 38.270 ]

 


Limpando o buffer do teclado em C



Eu não sei quanto à vocês, mas comigo já aconteceu muitas vezes de fazer um programa para ler um caracter ou uma string, aí quando chegava no local de ler a string ou o caracter passava direto sem ler a string ou o caracter.

Pois bem, quando isso acontece é porque o buffer do teclado contém sujeira e é bom da uma limpada. Para isso vamos usar:

#include<stdio_ext.h>

main()
{
   __fpurge(stdin);
   /* ...
   restante do programa */

}

É bom você usar esse comando antes de ler qualquer coisa.

Detalhe: declarando stdio_ext.h não precisa declarar stdio.h. E só funciona no Linux.

Espero que essa dica ajude em alguma coisa.

Falow!

Outras dicas deste autor

Apostila de ncurses bem completa

Leitura recomendada

Compilando e executando programas em C no Linux

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

Acessando um valor dada sua posição numa matriz bidimensional

Melhor Controle de Memória de Strings em C

Curso de C em vídeo ambientado no Linux

  

Comentários
[1] Comentário enviado por coyote em 26/05/2004 - 14:46h

Uma outra opção eh utilizar o fflush(stdin)
que tambem pode ser utilizado para atualizar a tela durante um loop , fflush(stdout).
esta contido em stdio.h e funciona tanto no linux como no windows

Cassio

[2] Comentário enviado por pandegas em 14/02/2005 - 18:03h

Costumava usar fflush tb, mas valew pela dica

[3] Comentário enviado por marcelhb em 04/11/2005 - 22:05h

Que vergonha gente.. fflush(stdin) é errado, fflush é pra limpar na saída de algo... Leiam sobre isso aqui, e vejam porque fflush(stdin) é errado ;)
http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351
Abraços

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

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

[5] Comentário enviado por ihtraum em 03/04/2006 - 20:52h

não é aconselhável usar essa biblioteca.
visto que ela não é portátil. só funciona no linux.
devem existir outras alternativas.
ou melhor, existem, vejam essa de nosso amigo rogério:

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=368

uma boa alternativa.

[6] Comentário enviado por f_Candido em 24/09/2007 - 21:07h

Muito Boa. Apesar de funcionar apenas no Linux, ajuda bastante, pra quem está migrando.
Abraços

[7] Comentário enviado por p@b10 em 27/09/2007 - 15:54h

Eu leio assim

scanf("%c%*c", &Nome_da_variavel);

o "%*c" é como se o scanf esperasse algo para ler e jogar no lixo ^^, (como o enter por exemplo)

espero ter ajudado!!!

Abraços

[8] Comentário enviado por mlegidio em 24/10/2007 - 00:58h

acabei de aprender uma bem legal...
scanf(" %c", &vari);
notem q tem um espaço entre as aspas e o percent.
vi essa dica aki no VOL.

[9] Comentário enviado por mecsys em 13/01/2011 - 19:07h

Boa dica, me ajudou muito. Estava tentando usar fflush(stdin), mas não estava adiantando.

Valeu!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts