CITH 4 Denunciar post Postado Novembro 14, 2014 Estou tendo um problema na limpeza do buffer após usar o delimitador de string. Testem o código seguinte: #include <stdio.h> int main() { char Test[99]; do { scanf(" %3s",Test); printf("%s\n",Test); } while( 1 ); } Eu desejo coletar apenas 3 caracteres da string digitada, e está saindo como planejado, mas o resto da string que não foi coletada fica no buffer, ocasionando o problema que vocês já deve ter percebido. :upset: Utilizando o operador de supressão "*" no scanf() não dá muito certo, utilizando o fflush(stdin) resolve, pois ela limpa o buffer todo, mas estou abolindo essa função da minha vida. O que eu devo fazer? Se puderem me ajudar agradeço muito. Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Novembro 15, 2014 #include <stdio.h> int main() { char Test[99]; do { scanf(" %3s%*s",Test); printf("%s\n",Test); } while( 1 ); } Compartilhar este post Link para o post Compartilhar em outros sites
CITH 4 Denunciar post Postado Novembro 15, 2014 Ainda há um problema, e se o usuário digitar menos de 3 caracteres? Teste aí.Estou precisando pra um menu, com opções de 1 até 9, onde o usuário pode digitar o que quiser. Mas claro, só quero coletar o 1º caractere digitado. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 15, 2014 Tentou fgets?http://linux.die.net/man/3/fgets Compartilhar este post Link para o post Compartilhar em outros sites
CITH 4 Denunciar post Postado Novembro 15, 2014 Isis, não deu certo, ou eu que não sei utilizar bem essa função, olha só: #include <stdio.h> int main() { char Test[99]; do { fgets(Test,3,stdin); printf("%s\n",Test); } while( 1 ); } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 15, 2014 Não deu certo porquê? Não tem mto sentido colar só o código, falar que não deu certo e não fornecer o dado de teste... Compartilhar este post Link para o post Compartilhar em outros sites
CITH 4 Denunciar post Postado Novembro 16, 2014 Se você jogar esse código em qualquer compilador C eu tenho certeza que você tem capacidade de perceber o erro de cara. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Novembro 16, 2014 Se você jogar esse código em qualquer compilador C eu tenho certeza que você tem capacidade de perceber o erro de cara. E o que custa você explicar o problema? Nem sempre temos tempo (e vontade) de ficar copiando código e compilando, pra descobrir o que o usuário quer. O segundo parâmetro de fgets é o tamanho máximo da string de leitura. Isso inclui o \n e o \0. No seu caso deveria ser 5, não 3. Detalhe é que, se o usuário digitar mais de 3 caracteres, o buffer vai ficar cheio e na próxima leitura, terá o mesmo problema do início. O ideal seria limpar o buffer sempre após cada leitura ou ler todos os caracteres e pegar sempre os 3 primeiros. Compartilhar este post Link para o post Compartilhar em outros sites