rickfelix Posted May 5, 2009 at 11:19 PM Report #261763 Posted May 5, 2009 at 11:19 PM Olá, estou aqui com um problema num código, se alguém me conseguir explicar o porquê do while me estar a imprimir duas vezes o que lá está dentro agradecia 😛 int i; char opcao; for(i = 0; i < 3; i++){//comeca em dois para ignorar o argumento passado. printf("Tem a certeza que pretende jogar ao domino na posicao %s?[s/n]: \n", array_pos[i]); opcao = getchar(); while(opcao != 's' && opcao != 'S' && opcao != 'n' && opcao != 'N' ){ printf("Opcao inserida incorrecta\n"); printf("Tem a certeza que pretende jogar ao domino na posicao %s?[s/n]: \n", array_pos[i]); opcao = getchar(); } o output está a sair duplicado Opcao inserida incorrecta Tem a certeza que pretende jogar ao domino na posicao Y?[s/n]: Opcao inserida incorrecta Tem a certeza que pretende jogar ao domino na posicao Y?[s/n]: desde já obrigado. 😞
Baderous Posted May 5, 2009 at 11:30 PM Report #261765 Posted May 5, 2009 at 11:30 PM Tens de limpar o buffer de entrada porque quando inseres a opção, carregas em 2 teclas: a da letra e o ENTER, e o getchar() só vai pegar na letra, deixando o ENTER no buffer. Assim que o getchar() que está dentro do ciclo executar, ele apanha o ENTER e utiliza-o, sem tu poderes fazer nada. Tenta limpar o buffer no início do ciclo: scanf("%*[^\n]"); scanf("%*c"); https://wiki.portugal-a-programar.pt/dev_geral/c/scanfparastrings/
rickfelix Posted May 5, 2009 at 11:59 PM Author Report #261768 Posted May 5, 2009 at 11:59 PM ah ok, era o que suspeitava, ainda tentei user o fflush(stdin); mas não funcionou correctamente, só a titulo de curiosidade há alguma forma de limpar o ENTER do buffer? :-)
Baderous Posted May 6, 2009 at 12:14 AM Report #261769 Posted May 6, 2009 at 12:14 AM A forma que eu indiquei faz isso.
rickfelix Posted May 7, 2009 at 09:18 AM Author Report #262049 Posted May 7, 2009 at 09:18 AM yah, obrigado baderous 👍
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now