Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Função abs() não deixa imprimir números com casas decimais "quebradas".

Aparentemente a função "abs()" está interferindo na contagem de pontos. Até eu inserir essa função, ele me retornava os valores "quebrados" das casas decimais, entretanto agora ele sempre me retorna o valor inteiro seguido de 0s (por exemplo, 999.00). Há alguma maneira de impedir que isso ocorra sem ter que abrir mão do "abs()" ou então sem o uso de gambiarras?

Segue abaixo meu código até a presente aula:

#include #include

int main() {

//Imprime o cabeçalho do jogo

    printf("******************************************");
printf("\n* Bem vindo ao nosso jogo de adivinhacao *\n");
printf("******************************************");

int numSecreto = 42, chute, ganhou = 0, numTentativas = 1;
float pontos = 1000;

while(ganhou == 0) {
   printf("\nTentativa %i.", numTentativas);
   printf("\nQual eh o seu chute, jogador? ");
   scanf("%i", &chute);

   if(chute < 0) {
        printf("\nATENCAO!\nVoce nao pode digitar numeros negativos!\n");
        continue;
   }

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

    if(acertou) {
        printf("\nParabens!!!!!\nAcerto miseravi!!!\n");
        ganhou = 1;
    }
    else if(maior) {
        printf("\nVoce errou! Quem sabe na proxima...\n");
        printf("Seu numero chutado eh MAIOR que o numero secreto. ;D\n");
    }
    else {
        printf("\nVoce errou! Quem sabe na proxima...\n");
        printf("Seu numero chutado eh MENOR que o numero secreto. ;D\n");
    }

    numTentativas++;
    float pontosPerdidos = abs(chute - numSecreto) / (float)2;
    pontos = (pontos - pontosPerdidos);

    printf("\n\n");
}
printf("Voce acertou em %i tentativas!\n", numTentativas - 1);
printf("Seu total de pontos foi de %.2f!\n", pontos);
printf("\n*** FIM DE JOGO ***\n\n");

}

1 resposta
solução!

Oi Kássio! Como vai ?

No seu código, tanto a variável pontos quanto a variável pontosPerdidos são do tipo float ou seja, um número que por natureza possui casas decimais, certo?!

Entretanto, está aparecendo dois zeros a mais devido a formatação do printf. Quando você coloca %.2fvocê diz para o programa printar um número com duas casas decimais, se fosse %.3f seriam 3 casas decimais e assim por diante. Pegou a ideia ?

Como você não quer nenhuma casa decimal, basta dizer para o programa: "eu não quero que você me mostre números com casas decimais" e como a gente diz isto ? Basta colocar %.0f.

printf("Seu total de pontos foi de %.0f!\n", pontos);

Esta é uma solução que irá corrigir em relação a apresentação para o usuário, mas o número continua sendo float, caso queira mudar realmente a variável para que a mesma seja inteira, teremos então que fazer o seguinte:

int pontos_auxiliar = pontos;
printf("Seu total de pontos foi de %d!\n", pontos_auxiliar);

Ou seja, criamos uma variável inteira que irá guardar somente a parte inteira da variável float, ignorando assim a parte decimal da mesma.

Importante ressaltar que o "problema" das casas decimais não está relacionado a função abs(), mas sim, com a forma de apresentação dos pontos, uma vez que os mesmos são do tipo float.

Qualquer dúvida estou a disposição. Espero ter ajudado. Bons estudos!!!