1
resposta

O programa fecha depois que executo

Boa noite, galera. Tudo bem? Venho aqui pedir uma ajuda ou tirar uma dúvida, logo após concluirmos o jogo. Tornamos ele executavel, certo? Mas toda vez que tento abrir ele fora do prompt de comando, eu me deparo com o seguinte erro, que é quando você acerta o número secreto, o programa fecha sozinho, sem ao menos exibir a frase final. O programa roda direitinho e exibi tudo, só quando acertamos o número secreto que ele fecha sozinho. Para jogar ele por completo, só posso com o prompt de comando? ou apenas executando ele(fora do prompt), consigo jogar, se sim, como posso fazer para ele parar de fechar sozinho? esse é o meu codigo. Ps:

// incluindo as bibliotecas

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main() { system("chcp 65001");

// imprimindo cabecalho bonito do jogo
printf("\n\n");
printf("          P  /_\\  P                              \n");
printf("         /_\\_|_|_/_\\                            \n");
printf("     n_n | ||. .|| | n_n         Bem vindo ao     \n");
printf("     |_|_|nnnn nnnn|_|_|     Jogo de Adivinhação! \n");
printf("    |\" \"  |  |_|  |\"  \" |                     \n");
printf("    |_____| ' _ ' |_____|                         \n");
printf("          \\__|_|__/                              \n");
printf("\n\n");

// declarando variaveis que serao usadas mais a frente
int chute;
int acertou;
int nivel;
int totaldetentativas;

// definindo a quantidade de pontos inicial
double pontos = 1000;

// gerando um numero secreto aleatorio
srand(time(0));
int numerosecreto = rand() % 100;

// escolhendo o nivel de dificuldade
printf("Qual o nível de dificuldade?\n");
printf("(1) Fácil (2) Médio (3) Difícil\n\n");
printf("Escolha: ");

scanf("%d", &nivel);

switch(nivel) {
    case 1: 
        totaldetentativas = 20;
        break;
    case 2:
        totaldetentativas = 15;
        break;
    default:
        totaldetentativas = 6;
        break;
}

// loop principal do jogo
for(int i = 1; i <= totaldetentativas; i++) {

    printf("-> Tentativa %d de %d\n", i, totaldetentativas);

    printf("Chute um número: ");
    scanf("%d", &chute);

    // tratando chute de numero negativo
    if(chute < 0) {
        printf("Você não pode chutar números negativos\n");
        i--;
        continue;
    }

    // verifica se acertou, foi maior ou menor
    acertou = chute == numerosecreto;

    if(acertou) {
        break;
    } else if(chute > numerosecreto) {
        printf("\nSeu chute foi maior do que o número secreto!\n\n");
    } else {
        printf("\nSeu chute foi menor do que o número secreto!\n\n");
    }

    // calcula a quantidade de pontos
    double pontosperdidos = abs(chute - numerosecreto) / 2.0;
    pontos = pontos - pontosperdidos;
}

// imprimindo mensagem de vitoria ou derrota
printf("\n");
if(acertou) {
    printf("             OOOOOOOOOOO               \n");
    printf("         OOOOOOOOOOOOOOOOOOO           \n");
    printf("      OOOOOO  OOOOOOOOO  OOOOOO        \n");
    printf("    OOOOOO      OOOOO      OOOOOO      \n");
    printf("  OOOOOOOO  #   OOOOO  #   OOOOOOOO    \n");
    printf(" OOOOOOOOOO    OOOOOOO    OOOOOOOOOO   \n");
    printf("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  \n");
    printf("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  \n");
    printf("OOOO  OOOOOOOOOOOOOOOOOOOOOOOOO  OOOO  \n");
    printf(" OOOO  OOOOOOOOOOOOOOOOOOOOOOO  OOOO   \n");
    printf("  OOOO   OOOOOOOOOOOOOOOOOOOO  OOOO    \n");
    printf("    OOOOO   OOOOOOOOOOOOOOO   OOOO     \n");
    printf("      OOOOOO   OOOOOOOOO   OOOOOO      \n");
    printf("         OOOOOO         OOOOOO         \n");
    printf("             OOOOOOOOOOOO              \n");
    printf("\nParabéns! Você acertou!\n");
    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");
}

}

1 resposta

O programa se encerra pq não tem mais nenhuma instrução para ser executada... Algumas ide's "adicionam" um pause no final da execução, ai o programa fica aguardando o usuário. Se você deseja que após a mensagem final a janela continue aberta, recomendo que você coloque explicitamente um comando de pausa.

Ex para windows

system("pause");

Ou talvez um

getch();

para aguardar a captura de uma tecla

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