Muitas vezes, quando lemos algum dado com scanf(), sobra alguma
"sujeirinha" no buffer do teclado, o que pode levar a erros na execução
do código. Por exemplo, compile e execute este código:
Ao executar, você verá que não serão lidos todos os caracteres, visto
que a função scanf() atribui o "lixo" do buffer para a próxima variável.
Podemos contornar isso de algumas formas. Uma é incluir uma chamada à
função getchar() após a leitura com scanf(). Isso garante a limpeza
do buffer, evitando erros. Assim:
[2] Comentário enviado por jllucca em 20/08/2003 - 20:14h
uma coisa que eu apreendi pra fazer ele limpar o buffer antes de pegar uma variavel é dar um espacinho. No caso ficaria scanf(" %c",&ch), eu acho isso bem mais simples e economico. Teria algum motivo para não usar essa maneira?
[3] Comentário enviado por bragil em 21/08/2003 - 00:04h
Pessoal, isso é como neston: existem mil maneiras de preparar, invente uma...
A propósito, fflush() aqui na minha máquina (slack 9, gcc 3.2.2, glibc 2.3.1) não funfa... Coloco antes do scanf(), depois do scanf(), mas não dá certo... A "sujeirinha" ainda fica lá...
Se alguém tiver um relato diferente com relação à fflush(), poste aqui...
[10] Comentário enviado por gedarius em 30/09/2009 - 15:24h
Pessoal, o uso do fflush() não é recomendado... na propria documentação da função (http://www.utas.edu.au/infosys/info/documentation/C/CStdLib.html#fflush) está escrito: "effect undefined for input streams" o que significa que nunca sabemos a maneira que ela vai se comportar, por isso existem outras maneiras de contornar esse problema, uma delas é a mostrada aqui hehe. claro que isso é a fflush()... mas creio que não seja muito diferente com a __fpurge()!!!