Não funciona porque no segundo scanf, o especificador de formato deve começar com %, e não #.
Mas ainda sim tem outro problema. fflush deve ser usado com streams de saída. Ao passar stdin, que é uma stream de entrada, o comportamento é indefinido. Ele pode até “funcionar” em algum ambiente, mas não é garantido que funcione em todos (não é portável). Leia aqui para mais detalhes. Tem outras formas de limpar o buffer de entrada, abaixo coloquei uma sugestão:
Só complementando, se o objetivo é ler strings, uma forma apropriada é usando a função fgets.
/*char*fgets(char*str,intnum,FILE*stream)*char*str:ponteiroparaastringquearmazenará*aleitura.*intnum:limitedecaracteressuportados*(incluindoo'\0').*FILE*stream:umponteiroparaarquivo,*usaremosstdin.*Retornaopróprioponteiropassadocasotenhasucesso*ouoponteiroNULLcasohajaalgumerronaleitura.*/charstring[30];printf("Entre com a string: ");fgets(string,30,stdin);string[strlen(string)-1]='\0';// remove o pulo de linha
É um livro para ser usado na disciplina que leciono. Não é um livro texto, mas da para vc usar os exercícios.
[]'s
H
Solucao aceita
hugokotsubo2 likes
Perfeito, de fato scanf tem uma série de problemas e é preferível usar fgets. Eu nem quis entrar nesses detalhes pra não ficar longo demais, mas já que é pra complementar:
Inclusive, o último link cita o uso de strcspn, que trata os casos em que vc digita mais do que o tamanho indicado no fgets (pois aí não terá o \n no final).
Enfim, lidar com I/O em C é um mundo à parte. Nem tem como cobrir tudo aqui. Mas só de advertir quanto ao uso de fflush(stdin) acho que já valeu o tópico