1
resposta

Numeros negativos na pontuação do jogo de adivinhação

Eai pessoal do forum <3, estou com um problema na pontuação do projeto do jogo de adivinhação, estou recebendo um valor indesejado na hora de calcular a pontuação do jogo, se meu chute for menor que o numero secreto, a pontuação do jogo aumenta quando na verdade deveria diminuir...
Peço a ajuda dos especialistas <3
Essa é minha terceira aula da linguagem C, então meu conhecimento é limitado, por enquanto kkkk

#include <stdio.h>


int main() {

    printf("*******************************************************************\n");
    printf("        ***** BEM VINDO(A) AO JOGO DA ADIVINHACAO *****\n");
    printf("*******************************************************************\n");

    int numerosecreto = 15;
    
    int chute;
    int tentativa = 1;
    
    int ganhou = 0; 
    int pontos = 1000;

    while(ganhou == 0) {

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

    if(chute < 0) {
        printf("Voce nao pode chutar numeros negativos \n");
        
        continue;
    }
    
    
    printf("Tentativa %d\n", tentativa);
    printf("Seu chute foi %d\n", chute);


    int acertou = (chute == numerosecreto);
    int maior = (chute > numerosecreto);
    
    if(acertou) {
        ganhou++;
        }
    else if(maior) {
            printf("seu chute foi maior do que o numero secreto \n");
            tentativa++;
        } 
    else{
            printf("seu chute foi menor do que numero secreto \n");
            tentativa++;
        }
        
        int pontosperdidos = (chute - numerosecreto) / 2;
        pontos = pontos - pontosperdidos;


        }


    printf("FIM DE JOGO!\n");
    printf("Voce acertou na %d tentativa!\n", tentativa);
    printf("Voce marcou %d pontos \n", pontos);

    return 0;
        
}
1 resposta

Olá, Marco! Tudo bem?

O problema está na forma como a variável pontosperdidos está sendo calculada. No seu código, a expressão int pontosperdidos = (chute - numerosecreto) / 2; pode resultar em um número negativo quando o chute é menor que o número secreto, o que faz com que a pontuação aumente, já que você está subtraindo um número negativo.

Para resolver isso, você pode usar a função abs() da biblioteca stdlib.h para garantir que pontosperdidos seja sempre um valor positivo. Aqui está como você pode ajustar o seu código:

#include <stdio.h>
#include <stdlib.h>  // Inclua esta biblioteca para usar a função abs()

int main() {

    printf("*******************************************************************\n");
    printf("        ***** BEM VINDO(A) AO JOGO DA ADIVINHACAO *****\n");
    printf("*******************************************************************\n");

    int numerosecreto = 15;
    
    int chute;
    int tentativa = 1;
    
    int ganhou = 0; 
    int pontos = 1000;

    while(ganhou == 0) {

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

        if(chute < 0) {
            printf("Voce nao pode chutar numeros negativos \n");
            continue;
        }
        
        printf("Tentativa %d\n", tentativa);
        printf("Seu chute foi %d\n", chute);

        int acertou = (chute == numerosecreto);
        int maior = (chute > numerosecreto);
        
        if(acertou) {
            ganhou++;
        }
        else if(maior) {
            printf("seu chute foi maior do que o numero secreto \n");
            tentativa++;
        } 
        else {
            printf("seu chute foi menor do que numero secreto \n");
            tentativa++;
        }
        
        int pontosperdidos = abs(chute - numerosecreto) / 2;  // Use abs() para garantir que seja positivo
        pontos = pontos - pontosperdidos;
    }

    printf("FIM DE JOGO!\n");
    printf("Voce acertou na %d tentativa!\n", tentativa);
    printf("Voce marcou %d pontos \n", pontos);

    return 0;
}

Com essa alteração, a pontuação será calculada corretamente, independentemente de o chute ser maior ou menor que o número secreto.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.