2
respostas

Declaração de variáveis

Olá! Eu gostaria de declarar as variáveis todas juntas no ínicio do código, porém está dando bug, alguém poderia me explicar porque assim funciona:

#include <stdio.h>

int main () {

    //Imprime o cabeçalho do jogo

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

    //Declaração de variáveis

    int numerosecreto = 42;
    int chute;


    // Funções do jogo - Entrada de valores
        for (int i = 1; i <= 3; i++) {

            printf ("* Tentativa %d de 3 *\n", i);
            printf("Qual é o seu chute? \n");
            scanf ("%d", &chute);
            printf("Seu chute foi: %d \n", chute);

          //Funções do jogo - Acertou ou errou
            int acertou = (chute == numerosecreto);
            if (acertou) {
                printf("Parabéns você acertou!\n");
                printf("Você é um bom jogador\n");

                // Parar de executar for
                break;
            }
                else {
                    int maior = (chute > numerosecreto);
                    if (maior) {
                            printf("Seu chute foi maior que o número secreto!\n");
                    } // if
                    else {
                            printf("Seu chute foi menor que o número secreto!\n");
                    } // else

                } //else
        } //for

    printf("Fim do jogo!\n");

} //main

e assim não

#include <stdio.h>

int main () {

    //Imprime o cabeçalho do jogo

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

    //Declaração de variáveis

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

    // Funções do jogo - Entrada de valores
        for (int i = 1; i <= 3; i++) {

            printf ("* Tentativa %d de 3 *\n", i);
            printf("Qual é o seu chute? \n");
            scanf ("%d", &chute);
            printf("Seu chute foi: %d \n", chute);

          //Funções do jogo - Acertou ou errou

            if (acertou) {
                printf("Parabéns você acertou!\n");
                printf("Você é um bom jogador\n");

                // Parar de executar for
                break;
            }
                else {

                    if (maior) {
                            printf("Seu chute foi maior que o número secreto!\n");
                    } // if
                    else {
                            printf("Seu chute foi menor que o número secreto!\n");
                    } // else

                } //else
        } //for

    printf("Fim do jogo!\n");

} //main

Muito obrigada desde já! :)

2 respostas

Olá, no segundo código, é atribuído os valores das variaveis e ao entrar no loop, em nenhum momento esse valor é alterado. Descrevendo melhor:

#include <stdio.h>

int main () {

    //Imprime o cabeçalho do jogo

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

    //Declaração de variáveis

    int numerosecreto = 42;
    int chute;
    //É atribuido o valor 0 (FALSE) à variável 'acertou'
    int acertou = (chute == numerosecreto); 
    //Também é atribuido o valor 0 à variável 'maior'
    int maior = (chute > numerosecreto);                                             

        for (int i = 1; i <= 3; i++) {

            printf ("* Tentativa %d de 3 *\n", i);
            printf("Qual é o seu chute? \n");
            scanf ("%d", &chute);
            printf("Seu chute foi: %d \n", chute);

            //Sempre será falso, pois a variavel 'acertou' não tem o valor atualizado em nenhum momento do loop
            if (acertou) {                                                                                 
                printf("Parabéns você acertou!\n");
                printf("Você é um bom jogador\n");

                // Parar de executar for
                break;
            }
                else {

                    //Sempre será falso. Variavel maior não tem o valor atualizado.
                    if (maior) {
                            printf("Seu chute foi maior que o número secreto!\n");
                    } // if
                    else {
                            printf("Seu chute foi menor que o número secreto!\n");
                    } // else

                } //else
        } //for

    printf("Fim do jogo!\n");

} //main

Tem algumas muitas formas que você conseguiria o resultado esperado, mas acredito que o seguinte código atenderia:

#include <stdio.h>

int main () {

    //Imprime o cabeçalho do jogo

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

    //Declaração de variáveis

    int numerosecreto = 42;
    int chute, acertou, maior;

        for (int i = 1; i <= 3; i++) {

            printf ("* Tentativa %d de 3 *\n", i);
            printf("Qual é o seu chute? \n");
            scanf ("%d", &chute);
            printf("Seu chute foi: %d \n", chute);

            //atualizamos os valores das  variaveis
            acertou = (chute == numerosecreto);
            maior = (chute > numerosecreto);

            if (acertou) {
                printf("Parabéns você acertou!\n");
                printf("Você é um bom jogador\n");

                // Parar de executar for
                break;
            } else if (maior) {  //Ja atualizamos o valor da variavel 'maior', entao podemos usar 'else if'
                printf("Seu chute foi maior que o número secreto!\n");
            } //else if
            else {
                printf("Seu chute foi menor que o número secreto!\n");
            } // else
        } //for

    printf("Fim do jogo!\n");

} //main

Fica uma ideia de como reorganizar o código para ficar mais legível.

#include <stdio.h>

typedef enum estado { INICIO, VITORIA, DERROTA, FIM } estado_t;

#define DICA(x, y)                                  \
    printf(                                         \
        "Seu chute foi %s que o número secreto!\n", \
        ((x) > (y)) ? "maior" : "menor"             \
    )

estado_t jogo(int segredo) {
    for (int i = 1; i <= 3; i++) {
        int palpite;

        printf("Tentativa %d de 3: ", i);
        scanf("%d", &palpite);

        if (segredo == palpite)
            return VITORIA;
        else
            DICA(palpite, segredo);
    }
    return DERROTA;
}

int main(int argc, char **argv) {
    static char const* const mensagens[] = {
        "***************************************\n"
        "*Bem Vindo ao nosso jogo de advinhação*\n"
        "***************************************\n\n"
        "Você terá 3 tentativas para acertar o número secreto\n\n",

        "Parabéns, você acertou!\n"
        "Você é um bom jogador\n\n\n",

        "Infelizmente não foi dessa vez!\n"
        "Tente novamente uma outra hora\n\n\n",

        "************* Fim do jogo *************\n"
    };

    puts(mensagens[INICIO]);
    puts(mensagens[jogo(42)]);
    puts(mensagens[FIM]);

    return 0;
}