4
respostas

Erro após f() double

Após adicionar o função Double, os pontos travaram em 1000!

Obrigado.

4 respostas

Olá Antonio. Tudo bem ? Espero que sim.

Poderia colocar seu código aqui, dessa maneira vou conseguir te ajudar melhor.

Fico no aguardo, obrigado.

#include <stdio.h>
#define N_TENTATIVAS 5

int main(void) {
  //Cabecalho
  printf("###############################\n");
  printf("Bem vindo ao jogo de advinhacao\n");
  printf("###############################\n");

  int numerosecreto = 42;
  double pontos = 1000;
  int chute;
  int tentativas=1; 

      while(1) {

    printf("Qual e o seu chute\n");
    printf("Tentativa %d \n", tentativas);
    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);

  if(chute < 0){

        printf("Não chute numeros negativos\n");
  }

  int acertou = (chute == numerosecreto);
  int maior = chute > numerosecreto;
  int menor = chute < numerosecreto;
  if(acertou) {
    printf("Parabens, voce acertou!\n");

    break;
  }
   else if(maior){ 

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

      }

    else if(menor){

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

        }
      tentativas = tentativas + 1;
      }
     double pontosperdidos = (chute - numerosecreto) / 2.0  ;
    pontos = pontos - pontosperdidos;

    printf("Fim de jogo!\n");
    printf("Voce fez %0.1f pontos\n", pontos);
    printf("Acertou em %d tentativas\n", tentativas);
}

Obrigado pela atenção!

Legal Antonio.

Seu código está correto, só tem um pequeno detalhe que está gerando essa situação.

O trecho de código que é feito a conta da pontuação, que é esse abaixo:

    double pontosperdidos = (chute - numerosecreto) / 2.0;
    pontos = pontos - pontosperdidos;

Ele está fora do escopo do while, o nosso laço de repetição, portanto a conta não é feita até você acertar o numero e quando você acerta o numero os pontos perdidos são zero, com isso seus pontos ficam com o valor 1000.

A solução, basta colocar esse trecho dentro do escopo do while, o escopo é delimitado pelas chaves { }

Atualmente está assim:

}
     double pontosperdidos = (chute - numerosecreto) / 2.0  ;
    pontos = pontos - pontosperdidos;

Para a correção, basta colocar antes da ultima chave do while, dessa maneira:

    }
    tentativas = tentativas + 1;
    double pontosperdidos = (chute - numerosecreto) / 2.0;
    pontos = pontos - pontosperdidos;
  }

Desse jeito a cada tentativa de chute, essa conta será feira e então os pontos do jogador serão calculados.

O código final fica assim:

#include <stdio.h>
#define N_TENTATIVAS 5

int main(void)
{
  //Cabecalho
  printf("###############################\n");
  printf("Bem vindo ao jogo de advinhacao\n");
  printf("###############################\n");

  int numerosecreto = 42;
  double pontos = 1000;
  int chute;
  int tentativas = 1;

  while (1)
  {

    printf("Qual e o seu chute\n");
    printf("Tentativa %d \n", tentativas);
    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);

    if (chute < 0)
    {

      printf("Não chute numeros negativos\n");
    }

    int acertou = (chute == numerosecreto);
    int maior = chute > numerosecreto;
    int menor = chute < numerosecreto;
    if (acertou)
    {
      printf("Parabens, voce acertou!\n");

      break;
    }
    else if (maior)
    {

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

    else if (menor)
    {

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

  printf("Fim de jogo!\n");
  printf("Voce fez %0.1f pontos\n", pontos);
  printf("Acertou em %d tentativas\n", tentativas);
}

Na programação o escopo é algo muito importante, porque é a maneira de explicar para o programa onde algo começa e termina. Mas é um engano bem comum esquecer das chaves ou colocar um trecho de código fora do escopo. O importante é sempre revisar o código e também mostrar para outras pessoas, porque elas podem enxergar algo que você que está imerso no código as vezes não vê.

Espero ter ajudado, mas qualquer duvida não hesite em perguntar.

Bons estudos.

Muito obrigado pela atenção!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software