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

Função abs() usada duas vezes seguidas

Acabei tentando refazer o código sozinho no windows para praticar e usei a função abs() 2 vezes, a primeira na hora de realzar o calculo da variavel pontosPerdidos e outro depois das condições fazendo com que oque estava dentro de pontosPerdidos passasse por ela denovo, sei que não faz sentido usar duas vezes, mas acabei cometendo esse erro de repetir o código, mas enfim, quando compilei o programa percebi que ele não estava atribuindo oque vem depois da virgula, ou seja, estava me retornando apenas o inteiro, segue o código:

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


void main(){
    printf("*****************************************\n");
    printf("**Bem-Vindo ao nosso jogo de advinhação**\n");
    printf("*****************************************\n");

    int numerosecreto = 10;
    int chute;
    double pontos = 1000;
    int tentativa = 1;

    while(1){


        printf("Tentativa %d\n", tentativa);
        printf("Pontos = %.2f\n", pontos);

        printf("Qual o seu chute??\n");
        scanf("%d", &chute);

        printf("O seu chute %d \n", chute);

        double pontosPerdidos = abs(chute - numerosecreto)/2.0;
        printf("Pontos perdidos = %.2f\n",pontosPerdidos);


        if(chute < 0){
            printf("Você não pode chutar um numero abaixo de 0, tente outro numero!\n");
            tentativa--;
        }

        else if(numerosecreto == chute){
            printf("Você acertou em um total de %d tentativas, parabéns!!\n", tentativa);
            printf("O seu total de pontos foi: %.2f\n",pontos);
            break;
        }

        else if(numerosecreto > chute){                                                    
            printf("Seu chute foi menor do que o número secreto, tente outra vez\n");
        }

        else{                                                    
            printf("Seu chute foi maior do que o número secreto, tente outra vez\n");
        }
        pontosPerdidos = abs(pontosPerdidos);
        pontos -= pontosPerdidos;
        tentativa++;
    }
    printf("FIM DE JOGO!\n");
}

Resolvi o problema tirando das ultimas linhas a declaração: pontosPerdidos = abs(pontosPerdidos); .

Dai vem a minha dúvida acerca da função abs(), se ela retorna um valor absoluto, ou seja, positivo caso o numero seja negativo, porque que ela estava excluindo os valores depois da virgula?

1 resposta
solução!

Você esta confundindo as funções cara, repare na assinatura do metodo abs:

int abs(int x);

Percebe que ele trabalha com inteiros? O que ocorreu foi que você sofreu um downcast, por isso que perdeu os valores depois da virgula.

Em C para lidar com doubles ou floats você deve utilizar uma das seguintes assinaturas.

double fabs (double number)
float fabsf (float number)

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