Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvuda sobre o Compilador GCC no Windows

Prezados,

Ao efetuar o comando gcc programa.c -o programa.exe para compilar via prompt no Windows, o mesmo não me gerou nenhum tipo de alerta e ao executar o programa a variável pontos fica com o valor de 0 no final. Alguém poderia me ajudar?

int main()
{
    //imprime o cabeçalho do nosso jogo
    printf("******************************************\n");
    printf("* Bem vindo ao nosso jogo de adivinhacao *\n");
    printf("******************************************\n");

    int numerosecreto = 42;
    int chute;
    int tentativas = 1;
    float pontos = 1000;

    while(1) {    

      printf("Tentativa %d\n", tentativas);
      printf("Qual e o seu chute? \n");
      scanf("%d", &chute);
      printf("Seu chute foi %d\n", chute);
      system("cls");

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

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

      if(acertou) {
          printf("Parabens! Voce acertou\n");
          printf("Jogue de novo, voce e um bom jogador!\n");

          break;
     }

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

        else {
            printf("Seu chute foi menor que o numero secreto\n");
        }

        tentativas++;

        int pontosperdidos = (chute - numerosecreto) / 2;
        pontos = pontos - pontosperdidos;
    }

    printf("Fim de jogo\n");
    printf("Voce acertou em %d tentativas\n",tentativas);
    printf("Total de pontos: %d\n", pontos);
    return 0;
  }
5 respostas

Tente executar o código apos retirar o "return 0;" =]

Mesmo sem o "return 0;" tive o mesmo problema.

Quando eu coloco os tipos corretos de entrada e saída de dados, o resultado sai como esperado, mas ao colocar "float = 1000" e no printf colocar para visualizar este dado como um int "prinf("%d", pontos) é que acabo recebendo este valor de 0 na saída de tela da variável pontos

solução!

Fabio, para exibir floats no printf, tem que usar %f. O %d é para inteiros.

Substitui a linha

printf("Total de pontos: %d\n", pontos);

por essa

printf("Total de pontos: %f\n", pontos);

para limitar a precisão decimal para duas casas, usa %.2f.

printf("Total de pontos: %.2f\n", pontos);

Testa, pra ver se dá certo.

Manoel,

Agora deu certinho em relação ao valor dos pontos. Apesar de ainda não entender o motivo do gcc não ter me retornado nenhum alerta sobre essa diferença de tipos, conseguir resolver e entender essa diferença na utilização dos tipos no printf

Muito obrigado.

É estranho mesmo, Fabio!

Aqui no meu, se eu fizer:

#include <stdio.h>

int main() {
    float teste = 33;
    printf("%d", teste);
}

E depois compilar, recebo o seguinte erro:

$ gcc teste.c -o teste
teste.c: In function ‘main’:
teste.c:5:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
  printf("%d", teste);
         ^

Em todo caso, agora o seu está redondo. =)

Bons estudos.