paulo1205
(usa Ubuntu)
Enviado em 23/10/2014 - 01:21h
Thihup escreveu:
Amigo , quer ler como funciona ou quer ver um video ?
Hehe
Olha aki :
https://www.youtube.com/watch?v=W-X2_v4Oyx8
Aki é explicado pq não é legal usar o fflush()(Windows) ou o __purge() (Linux)
Espero ter ajudado
[]'s
T+
Assisti ao vídeo. É interessante, mas recomendo cautela, porque o autor comete alguns erros e fala diversas coisas imprecisas. Deixei lá alguns comentários, e reproduzo alguns deles aqui porque se aplicam ao que foi dito ao longo da discussão.
Parabéns por ter indicado que fflush(stdin) é um abuso do padrão do C. Não é muita gente que entende isso -- por incrível que pareça.
getchar() devolve valor do tipo int, não do tipo char. Se você usar uma variável char para recebê-lo, pode tornar inviável distinguir entre o byte com valor 255 (ou -1, dado que o default do char na plataforma Intel é ser equivalente a signed char) e o marcador EOF (que é um inteiro com valor -1).
Quando se lê caráter-a-caráter, com getchar(), fgetc() ou mesmo scanf("%c"...), é errado considerar '\n' como lixo. “Lixo” geralmente é o que se tem quando, após ler alguma coisa com scanf(), tenta-se ler outra coisa com uma função que não pule espaços em branco (a biblioteca do C considera '\n' como espaço em branco). A maioria das pessoas não conhece realmente o comportamento de scanf(), que eu considero uma das funções mais complicadas da biblioteca padrão. É uma infelicidade que ela seja uma das primeiras coisas a serem mostradas, sem o devido cuidado, a novatos em C.
Sua função de “limpeza” tem (...) um problema: se o buffer já estiver limpo, você vai obrigar o usuário a gerar lixo que a função possa limpar, ou vai considerar como lixo possíveis dados que talvez devessem ser consumidos de modo útil pelo programa.
“Limpar lixo” é um problema porque a própria ideia de “lixo” é problemática. O padrão fala de streams (fluxos) de dados, e deliberadamente não impõe muitas restrições sobre que dados podem estar nesses fluxos. Fica a cargo de cada programa tratar devidamente os dados que recebe e dispor corretamente os dados que produz. E isso é bom, porque dá liberdade para que se consiga escrever um programa que trate qualquer tipo de dados. O custo, porém, dessa liberdade é a necessidade de saber bem o que se está fazendo.