2
respostas

Finalizando o jogo com erro

Achei o curso muito bom e didatico, entretanto, meu codigo nao roda de acordo... Se puderem me ajudar ou sugerir algo:

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

int main() {

printf("\n\n");
printf("                                     /\\         /\\                             \n");
printf("                                   (^;^)       (^;^)                             \n");
printf("                          __       /^/\\^\\     /^/\\^\\  __                     \n");
printf("                       __:  |     / /  \\ \\   / /  \\ \\    |  :__              \n");
printf("                      |  :__|     |^^^^^^|   |^^^^^^|    |__:  |                 \n");
printf("                      |__:  |     \\/\\/\\/\\/   \\/\\/\\/\\/    |  :__|         \n");
printf("                           / \\    |  __  |   |  __  |   / \\                    \n");
printf("                          /   \\   | |__| |   | |__| |  /   \\                   \n");
printf("                         /_____\\  |      |   |      | /_____\\                  \n");
printf("                         |     |==  ==  ==  ==  ==  ==|     |                    \n");
printf("                         |  _  | |__||__||__||__||__| |  _  |                    \n");
printf("                         | | | |                      | | | |                    \n");
printf("                     ~~~~| |=| |   __           __    | |=| |~~~~~               \n");
printf("                  ~~~~~~~|     |  |  |    __   |  |   |     |~~~~~~~~            \n");
printf("                 ~~~~~   |     |  |==|   |::|  |==|   |     |   ~~~~~~~          \n");
printf("                ~~~~~    |     |         |::|         |     |~    ~~~~~~         \n");
printf("                ~~~~     |_____|_________|::|_________|_____|~~    ~~~~~~        \n");
printf("                ~~~~     ~~~~~~~~~~~~~~~~++++~~~~~~~~~~~~~~~~~      ~~~~~        \n");
printf("                 ~~~~      ~~~~~~~~~~~~~~++++~~~~~~~~~~~~~~~       ~~~~~~        \n");
printf("                   ~~~~       ~~~~~~~~~~~++++~~~~~~~~~~~         ~~~~~~~         \n");
printf("                      ~~~~~             ++++++                 ~~~~~             \n");
printf("                         ~~~~~~~~~~~~~~~++++++~~~~~~~~~~~~~~~~~~~~               \n");
printf("                                        ++++++                                   \n");
printf("                                                                                 \n");
printf("                                    * BEM-VINDO ao *                             \n");
printf("                                 * JOGO de ADVINHACAO *                          \n");
printf("                                                                                 \n");
printf("\n\n");    

int segundo = time(0);
srand (segundo);

int numerogrande = rand();
int numerosecreto = numerogrande % 100;

int tentativas = 0;
int chute;
double pontos = 1000;

int acertou;

int numerodetentativas = 10;


     
for(int i =1; i <= numerodetentativas; i++)  { 
    
    
    printf("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 acertou = (chute == numerosecreto);
    int maior = chute > numerosecreto;

    if(acertou){
       break;
    }   
    
    else if (maior) {
            printf(" - Seu chute foi maior que o numero secreto, tente novamente!\n");
    }
    
    else {
            printf(" - Seu chute foi menor que o numero secreto, tente novamente!\n");
    }
    
    tentativas++;
    
    double pontosperdidos = abs(chute - numerosecreto) / 2.0; 
    pontos = pontos - pontosperdidos;
    
    
}

 printf("Fim de Jogo\n");    

if(acertou){
    
    printf("Parabens, vc acertou!\n");
    printf("Vc acertou em %d tentativas!\n",tentativas);
    printf("Você fez %.2f pontos. Até a próxima!\n\n", pontos);
    
}else {
    
    printf("       \\|/ ____ \\|/    \n");   
    printf("        @~/ ,. \\~@      \n");   
    printf("       /_( \\__/ )_\\    \n");   
    printf("          \\__U_/        \n");

    printf("\nVocê perdeu! Tente novamente!\n\n");

    
}

}

2 respostas

Mas não ficou muito claro qual é o problema específico ou onde tá pegando.

Aqui vão umas dicas geralzinhas:

As #include precisam ser separadas. No seu código, elas tão grudadas. Formatação é bem importante!

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

Você criou a variável int acertou; lá no começo e também dentro do loop for. Tira a que tá dentro do loop, pra não ficar repetindo.

```
// Tira essa linha que tá dentro do loop
// int acertou = (chute == numerosecreto);
```

Às vezes, comparar direto entre tipos diferentes (tipo int e double) dá uns alertas. Confirma que as comparações e atribuições de tipos tão na vibe certa. No código, tu usa double pontosperdidos, mas a pontos é double. Não deve dar erro, mas é bom manter tudo do mesmo jeito.

Se tiver algum erro específico ou se puder contar mais sobre o que tá dando errado, tô aqui pra dar aquela força.

Tem um problema na declaração e uso da variável acertou. O problema está em duas linhas:

int acertou;

...

int acertou = (chute == numerosecreto);

Na primeira linha, você declara a variável acertou como inteiro no escopo global do programa. Na segunda linha, dentro do loop, você declara novamente uma variável com o mesmo nome (acertou), mas dessa vez dentro do escopo local do loop. Isso cria uma nova variável local, e a variável global não é modificada dentro do loop.

Para corrigir isso, você deve remover a declaração da variável int acertou; no início do programa e usar apenas a variável que foi declarada dentro do loop. Então, a segunda linha dentro do loop ficaria assim:

acertou = (chute == numerosecreto);

Com essa correção, a variável global acertou será atualizada dentro do loop e poderá ser usada corretamente na condição do bloco if fora do loop para determinar se o jogador acertou ou não.

Mas de resto seu código parece estar tudo certo!

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