2
respostas

Erro na execução vs ordem de declaração das variáveis

Levando em consideração a aula de escopo, pergunto:

Por que se eu declaro todas as variáveis "int" logo abaixo da abertura do jogo, o programa não reconhece o "42" como chute == numerosecreto ? Exemplo:

    int numerosecreto = 42;
    int chute;
    int acertou = (chute == numerosecreto);

o código acima não funciona corretamente (ao menos para mim), embora esteja já declarada nas variáveis acima, alterando posição tão somente com o questionamento de chute...

2 respostas

Oi Luciano, tudo bem?

Para este código funcionar corretamente, você tem que declarar um valor para o chute ou então, pedir para que o usuário digite um valor. Observe o seguinte: você compara se o valor do chute é igual ao valor do número secreto, certo?! O valor do número secreto é 42, mas, qual o valor de chute? Não temos um valor definido. Então, o programa irá pegar um valor qualquer. Pegou a ideia?

Podemos fazer então:

int numerosecreto = 42;
int chute = 42;
int acertou = chute == numerosecreto;
printf("%d\n", acertou);

Ou:

int numerosecreto = 42;
int chute;
scanf("%d", &chute);
int acertou = chute == numerosecreto;
printf("%d\n", acertou);

O printf é só para você analisar o valor resultante da variável acertou, onde, caso verdadeiro será 1 e caso falso, será 0.

Qualquer dúvida é só falar. Abraços e bons estudos

Olá Luciano, tudo bem com você?

Não sei se compreendi bem a sua questão, você quis dizer se o seu código estivesse assim:

int numerosecreto = 42;
int chute;
int acertou = (chute == numerosecreto);

scanf("%d", &chute);

Por que o acertou não reconhece o chute igual ao número secreto?

Acontece que o nosso programa irá ir linha por linha do nosso programa, então quando ele chega em acertou, ainda não há nada na variável chute (apenas qualquer valor aleatório), então o resultado é 0, por não ser igual, por isso quando separamos:

int numerosecreto = 42;
int chute;

scanf("%d", &chute);

int acertou = (chute == numerosecreto);

O nosso programa funciona corretamente, pois só iremos calcular o valor de acertou quando tivermos tudo bem definido pelo nosso programa!

Na primeira versão, mesmo atualizando o valor de chute, o nosso programa não irá refazer a conta para ver se o acertou é de fato igual, sem que nós explicitamente peçamos isso!

Foi isso que você não havia compreendido? Caso não, estou a disposição :)

Abraços e Bons Estudos!