• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rickfelix

while duplo? ---

5 mensagens neste tópico

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  :P

        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.  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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");

http://wiki.portugal-a-programar.org/c:scanfparastrings

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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? :-)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora