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:
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:
É isso aí, simples e prático!
Qualquer sugestão/correção é só comentar =)
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
Postar um comentário