Erro com scanf e fgets em sequência

Hoje eu estava fazendo o 1º dia de um desafio de 30 dias de código no HackerRank, aconselho a todos a fazerem, começa bem de leve, tem dicas, tutoriais em vídeo e fórum para perguntar (https://www.hackerrank.com/domains/tutorials/30-days-of-code ). Acho que vale a pena pra aprender e não perder o hábito.

Enfim, me deparei com um problema, usando linguagem C pura, que era ler um double e uma string, estava tentando fazer o seguinte:

 scanf("%lf", &second);  
 fgets(prhase, 100, stdin);  
   
 printf("%1.1f\n", second);  
 printf("%s", prhase);  

Mas ao tentar executar o programa, eu digitava primeiro o double, dava Enter e em seguida o programa pulava direto para os 'printf's... Ué, como assim?

Depois de bater cabeça aqui, encontrei a solução no StackOverflow(http://stackoverflow.com/questions/5546874/using-scanf-and-fgets-in-the-same-program):

O que ocorre é que o scanf lê o caracter pelo standard input e ignora o '\n' presente a linha, e na sequência, o fgets justamente lê o '\n' e entende que a string que ele está lendo é somente o '\n' e fim!

Então, o método indicado para que o scanf não deixasse o '\n' passar para o fgets é adicionar um "%*c" após o que é lido no scanf:

 
scanf("%lf%*c", &second);  
fgets(prhase, 100, stdin);  
   
printf("%1.1f\n", second);  
printf("%s", prhase);  

É isso aí, simples e prático!

Qualquer sugestão/correção é só comentar =)


Comentários

Postagens mais visitadas