Olá Marcelo! Tudo bem?
Desculpe pela demora em obter retorno.
A execução dessa forma está relacionada ao buffer de entrada do terminal. Ao digitar um caractere e pressionar "Enter", o buffer entende que você digitou dois caracteres: o caractere que você digitou e o caractere de nova linha ('\n') gerado pela tecla "Enter".
Quando você usa scanf("%c", &chute);
, ele lê o primeiro caractere presente no buffer, que é o que você digitou. No entanto, o caractere de nova linha ('\n') permanece no buffer. Então, na próxima iteração do loop, o scanf("%c", &chute);
é executado novamente, e desta vez ele lê o caractere de nova linha ('\n') no lugar de ler o caractere que você realmente digitou. Isso faz com que a impressão do resultado pareça estar atrasada, pois o caractere de nova linha é lido na próxima iteração.
Quando você altera o scanf("%c", &chute);
para scanf("\n%c", &chute);
, você está pedindo explicitamente ao scanf
para ler e descartar quaisquer caracteres de nova linha pendentes no buffer antes de ler o próximo caractere que você digitou. Dessa forma, o caractere correto é lido e o comportamento indesejado é corrigido.
Uma outra forma que podemos utilizar para contornar esse problema é modificar o scanf("%c", &chute);
para scanf(" %c", &chute);
(observe o espaço antes de "%c"). O espaço antes do "%c" indica que o scanf
deve ignorar quaisquer espaços em branco ou caracteres de nova linha pendentes no buffer antes de ler o próximo caractere digitado.
Espero ter ajudado! Abraços e bons estudos!