1
resposta

Não consegui entender porquê na última parte do meu código não entrava no if..

#include <stdio.h> #include <stdlib.h> #include <time.h>

int main() {

printf("\n\n");
printf("              p                  p         p                           \n");
printf("               /\\     p      p    /\\        /\\                      \n");
printf("              /__\\   /\\_____/\\   /__\\      /__\\                   \n");
printf("              |. |_=_|. . . .|_=_=_=_=_=_=_|. |        Bem vindo ao    \n");
printf("              |. |. .|  ___  |. . . . . . .|. |     Jogo de advinhação \n");
printf("              |. |   | |   | |             |. |                        \n");
printf("            __|__|___|_|___|_|_____________|__|__                      \n");
printf("           /          /   /                      \\                    \n");
printf("\n\n");

int segundos = time(0);
srand(segundos);

int numerogrande = rand();

int numerosecreto = numerogrande % 100;
int chute;
int tentativas =1;
double pontos = 1000;

int acertou = 0;

int nivel;
printf("Qual o nível de dificuldade que deseja?\n");
printf("(1)Fácil (2)Médio (3)Difícil\n\n");
printf("Escolha:");
scanf("%d", &nivel);

int numerodetentativas;

switch (nivel){
    case 1:
    numerodetentativas=20;
    break;

    case 2:
    numerodetentativas=15;
    break;

    default:
    numerodetentativas=6;
    break;

}

for(int i = 1; i<= numerodetentativas; i++) {

    printf("Tentativa %d\n", tentativas);
    printf("Qual e o seu chute? ");

    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);

    if(chute <0) {
        printf("Voce nao pode chutar numeros negativos!\n");
        continue;
    }

    int acertou = (chute == numerosecreto);
    int maior = (chute > numerosecreto);

    if (acertou) {
        printf("Voce acertou, parabens!\n\n");
        printf("Jogue novamente, você é um bom jogador!\n");
        break;

    } 
    else if(maior){
        printf("Seu chute foi maior que o numero secreto\n\n");

        }
    else{
        printf("Seu chute foi menor que o numero secreto!\n\n");
        }
        tentativas = tentativas+1;
        double pontosperdidos = abs(chute - numerosecreto) /(double)2;
        pontos = pontos - pontosperdidos;
    }


printf("Fim de jogo!\n");

if (acertou) {

        printf("Voce acertou na tentativa %d!\n", tentativas-1);
        printf("O seu total de pontos foram %.1f\n", pontos);

}
else{
        printf("Você perdeu! Tente novamente!\n");


}

}

1 resposta

Oi Valéria, tudo bem?

Acredito que o problema esteja na declaração da variável "acertou" dentro do loop for. Você declarou a variável "acertou" no início do seu código e depois declarou novamente dentro do loop. Isso faz com que o C trate as duas variáveis como sendo diferentes, mesmo que elas tenham o mesmo nome. Ou seja, o valor que você atribui à variável "acertou" dentro do loop não está sendo "visto" fora dele.

Pra corrigir isso, você pode simplesmente remover a declaração de "acertou" dentro do loop. Assim, você estará sempre se referindo à mesma variável, e o valor que você atribuir a ela dentro do loop será mantido quando o loop terminar.

for(int i = 1; i<= numerodetentativas; i++) {

    // ...

    acertou = (chute == numerosecreto); // remova o "int" daqui

    // ...
}

Dessa forma, a condição if (acertou) após o fim do jogo deverá funcionar corretamente. Se você conseguir fazer de outra forma, pode compartilhar com a gente!

Um abraço e bons estudos.