6
respostas

Pontuação final não é o número correto. Sempre dá um resultado maior.

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

int main()
{printf("\t\t*****************************\n");
 printf("\t\t     * Bem-vindo ao jogo *\n");
 printf("\t\t*****************************\n");


  int segundos = time(0);
  srand(segundos);
  int numeroaleatorio = rand();
  int n;
  int numerosecreto = numeroaleatorio%100 ;
  int i=1;
  double pontos = 1000.0;

  while (1)
  {
   printf("\t\tTentativa %i\n\n",i);
   printf("\t\tChute um n%cmero:\n",163);
   scanf("\t\t%i",&n);




  if (n<0)
  {
      printf("\t\tN%co digite n%cmeros negativos.\n",227,163);
      i--;
     continue;
  }

  else if (n == numerosecreto)
   {
       printf("\t\tVoc%c acertou! Parab%cns!\n\n",136,130);



       break;
   }
   else if (n>numerosecreto)
   {
       printf("\t\tO n%cmero digitado %c maior que o n%cmero secreto!\n",163,130,163);
       printf("\t\tTente novamente!\n\n");

   }
   else if (n<numerosecreto)
   {
       printf("\t\tO n%cmero digitado %c menor que o n%cmero secreto!\n",163,130,163);
       printf("\t\tTente novamente!\n\n");

   }
    i++;
    double perdas = (double)abs((n-numerosecreto)/2.0);
    pontos = (double)(pontos-perdas);

  }

  printf("\t\t  **********\n");
  printf("\t        **Fim do jogo**\n");
  printf("\t\t  **********\n");

  printf("\t\tVoc%c fez %.1f pontos\n\n",136,pontos);
  return 0;
}
6 respostas

Como assim? parece ta tudo certo

Também achava. Mas eu fiz o jogo e, no final, fiz as contas. Não batem os valores. E eu não consigo encontrar o motivo : ' /

Tipo... se seu chute for muito longe do número secreto a pessoa perde muito mais pontos mesmo.

Se o valor final estiver maior que o total de pontos é pq não ta transformando o número negativo em absoluto, pelo que vi aqui tu fez a conversão então não seria o problema.

Ele não dá maior que 1000. Ele dá maior do que deveria dar. Por exemplo. Se uma pessoa fez 3 chutes e tivesse que tirar 975 pontos, aparece que ela teve 980 ou algo assim. Mas eu já verifiquei tudo. Acho que esse deve ser o produto final mesmo. Eu que estou sendo rigoroso. Só pode ^^' Mas, obrigado!!!!

O programa está pegando a distância dos números, dividindo essa distância por 2, pegando o resultado final desses valores e subtraindo da pontuação. Eu testei esse código imprimindo o número secreto gerado, no inicio do loop, no meu teste o número gerado foi 50, chutei 40, teoricamente eu teria que perder 5 pontos, já que a distância foi de 10 e esses 10 são divididos por 2, e então eu chutei 40 mais uma vez, e logo depois coloquei 50 pra acabar o jogo, e realmente a pontuação final foi a correta, foram 990.0 pontos.

Seu código está correto, a única coisa que eu mudei foi tirar os warnings, tirando os parênteses da função 'abs', que estava cobrindo a divisão, já que não precisa calcular o absoluta da divisão porque dividir absoluto por 2.0 sempre vai dar um número absoluto

abs((n-numerosecreto)/2.0);
abs(n-numerosecreto)/2.0;

e a outra coisa foi tirar o 'if' do último 'else if', pois essa condição é a oposta da condição anterior e a última da validação, e então saiu os avisos :3 mas fora isso já estava tudo certo até onde eu vi.

Show de bola!!! Obrigado. Essa de tirar o parênteses do abs foi uma dica interessante.

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