llg
(usa Arch Linux)
Enviado em 21/07/2010 - 12:34h
E isso ai pessoal, C nao foi uma linguagem feita para se ter uma interface direta com o usuario pelo terminal. O proprio scanf(), se voces derem uma pesquisada pela net, e conhecido por ter varios bugs (como deixar lixo no buffer de entrada) e ser pouco confiavel, mais bem vamos a algumas opinioes:
Sobre o fflush(stdin): Essa funcao nao e recomendada pelo, padrao ANSI C, para limpar o buffer de saida, porque o comportamento e indefinido. Se ela funciona com algum de voces, provavelmente se deve a alguma gambiarra do compilador. o fpurge(stdin) tambem tem um comportamento semelhante e tambem nao e recomendada. Se voces se importam com portabilidade, nao as usem com o buffer de entrada.
Sobre scanf("\n%[^\n]s",sobrenome): Faz o que promete, e tem um comportamento identico ao de gets(). Mas elas possuem um limitante, nao verificam o tamanho da string e podem tentar colocar 60 chars onde se poderia colocar apenas 10, por isso usem fgets(variavel, tamanho do buffer, stdin) no lugar das duas, pois o fgets garante que o buffer nao sera excedido, evitando assim bugs com comportamento indefinido XD.
Recomendo fortemente que se for possivel e voces tiverem certeza sobre a corretude das entradas, que facam uso de arquivos ao inves de entrar com dados pelo terminal!!! XD
Ha tambem esse artigo em ingles que recomendo que leiam, ele explica melhor algumas coisas que falei.
"Coisas para se evitar em C/C++" :
http://www.gidnetwork.com/b-56.html
Espero ter ajudado, Lucas Lira Gomes
P.S.: Desculpem pela falta de acentuacoes, mais o teclado aqui e americano XD.