1
resposta

Desafio: Jogo da Adivinhação

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

int main() {
printf("\n\n");
printf(" P /\ P \n");
printf(" /\|
|/\ \n");
printf(" n_n | ||. .|| | n_n Bem vindo ao \n");
printf(" |
|
|nnnn nnnn||| Jogo de Adivinhacao!\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("Selecione o nivel de dificuldade: \n");
printf("(1) Facil (2) Medio (3) Dificil\n");
scanf("%d", &nivel);

int numerodetentativas;

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

        case 2: 
        numerodetentativas = 10;
        break;
       
        default: 
        numerodetentativas = 5;
        break; 

}

for(int i = 1; i <= numerodetentativas; i++) {
printf("Tentativa %d\n", tentativas);
printf("Qual e o seu chute: \n");

scanf("%d", &chute);
printf("Seu numero 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) {
   break;

} 
    else if (maior) {

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

    printf("Seu chute foi menor que o numero secreto\n");
}

  tentativas++;

double pontosperdidos = abs(chute - numerosecreto) / (double)2;

pontos = pontos - pontosperdidos;

}

printf("Fim de jogo\n");

if(acertou) {
printf("Parabens! Voce acertou!\n");
printf("Voce acertou em %d tentativas\n", tentativas);
printf("Total de pontos: %.1f\n", pontos);
printf("Jogue de novo, voce e um otimo jogador!\n");

} else { 
  printf("Voce perdeu! Tente de novo!\n");
}   

}

Esse é o meu código do que eu me lembro, mas eu estou achando estranho, o código está funcionando mas quando eu acerto o número secreto ele não mostra a mensagem do if(acertou) logo no final, o que eu fiz de errado ou o que está faltando?

1 resposta

Oi, Lucas! Como vai?

Do jeito que você explicou, o que chamou atenção foi que você declarou acertou fora do for, mas dentro do laço você criou outra variável com int acertou = (chute == numerosecreto); (isso “sombra” a variável de fora). Neste ponto, quando você acerta e dá break, o acertou de fora continua 0, então o if(acertou) final não entra.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!