2
respostas

Erro na impressão da pontuação

Personalizei o sistema de pontos na ideia de que se subtraísse 50 pontos a cada tentativa errada, mas o programa apresenta erro a partir da 4º tentativa.

#include <stdio.h>

int main() { printf("\n\n\n***\n"); printf("* Bem-vindo ao nosso jogo de adivinhacao! \n"); printf("**\n\n\n");

int secretnumber = 78;
int chute;
int tentativa = 1;
int pontos = 1000;

while (1) {
    printf("\nTentativa %d\n", tentativa);
     printf("\n Qual o seu chute?");
    scanf("%d", &chute);
    printf("Seu chute foi %d.\n", chute);

    if (chute < 0) {
        printf("Voce nao pode chutar numeros negativos!\n");
        continue;
    }

    int sucesso = chute == secretnumber;
    int mais = chute > secretnumber;

    if (sucesso) {
        printf("Parabens, voce conseguiu! :)\n");
        printf("Jogue novamente!\n");
        break;
    }

    else if (mais) {
        printf("Seu chute foi maior que o numero desejado.\n");
    }

    else {
        printf("Seu chute foi menor que o numero desejado.\n");
    }         
    tentativa++;

    int pontosperdidos = tentativa*50 - 50;
    pontos = pontos - pontosperdidos;
}   
 printf ("Voce acertou em %d tentativas.\n", tentativa); 
 printf ("Seu score foi %d", pontos);  

return 0; }

2 respostas

Isto está acontecendo por que a cada laço do While, é descontado o valor dos pontos, e não no final. Por exemplo, na primeira iteração será perdido 50 pontos. Na segunda, será perdido 100, na terceira será perdido 150 e na quarta 200, ou seja, em 4 tentativas, em vez de perder 200 pontos o jogo perderá 200+150+100+50 = 500 pontos. Talvez isso seja o caminho para solucionar o problema :)

O problema ocorre porque a variável pontosperdidos está sendo calculada incorretamente. Na linha 42, você está calculando os pontos perdidos para a tentativa atual usando a fórmula tentativa*50 - 50. Isso funciona bem para a primeira tentativa, pois tentativa é igual a 1, mas para as próximas tentativas, esse cálculo não está correto.

Para corrigir o problema, você pode calcular pontosperdidos usando a seguinte fórmula:

int pontosperdidos = 50 * tentativa;

Com essa fórmula, a quantidade de pontos perdidos aumentará em 50 a cada tentativa incorreta.

Aqui está o código corrigido:

#include <stdio.h>

int main() {
    printf("\n\n\n***\n");
    printf("* Bem-vindo ao nosso jogo de adivinhacao! \n");
    printf("**\n\n\n");

    int secretnumber = 78;
    int chute;
    int tentativa = 1;
    int pontos = 1000;

    while (1) {
        printf("\nTentativa %d\n", tentativa);
        printf("\nQual o seu chute?");
        scanf("%d", &chute);
        printf("Seu chute foi %d.\n", chute);

        if (chute < 0) {
            printf("Voce nao pode chutar numeros negativos!\n");
            continue;
        }

        int sucesso = chute == secretnumber;
        int mais = chute > secretnumber;

        if (sucesso) {
            printf("Parabens, voce conseguiu! :)\n");
            printf("Jogue novamente!\n");
            break;
        }
        else if (mais) {
            printf("Seu chute foi maior que o numero desejado.\n");
        }
        else {
            printf("Seu chute foi menor que o numero desejado.\n");
        }

        tentativa++;
        int pontosperdidos = 50 * tentativa;
        pontos = pontos - pontosperdidos;
    }

    printf("Voce acertou em %d tentativas.\n", tentativa);
    printf("Seu score foi %d\n", pontos);

    return 0;
}

Com esta correção, o programa deve subtrair 50 pontos a cada tentativa incorreta a partir da segunda tentativa.