Ir ao conteúdo
  • Cadastre-se

C Erro no Jogo da adivinhação


Posts recomendados

Gente, fiz esse jogo de adivinhação, e preciso que ele guarde os números digitados, caso o jogador saia.

Esta dando um erro que não consigo descobrir, e tenho que apresentar amanhã,

se alguém puder ajudar agradeço.

 

 

 

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



int main(void)
{
 char url[]="char.txt";
 char ch;
 FILE *arq;
 
 printf("num: ");
 ch=getchar();
 
 arq = fopen(url, "w");
 if(arq == NULL)
  printf("Erro, nao foi possivel abrir o arquivo\n");
 else{
  fputc(ch, arq);
  fclose(arq);
 }
 
 return 0;
}

int random();
void dicas(int num, int password, int tentativas);

int main()
{
    int continuar=1,
        password,
        tentativas,
        num;

    do
    {
        system("cls || clear");
        printf("Sorteando numero entre 1 e 1000...\n");
        password = random();

        printf("Comecou! Tente adivinhar o numero!\n\n");
        tentativas = 0;

        do
        {
            tentativas++;
            printf("Tentativa %d: ", tentativas);
            scanf("%d", &num);
            dicas(num,password,tentativas);
        }
        while( num != password);

        printf("Digite 0 para sair, ou qualquer outro numero para continuar: ");
        scanf("%d", &continuar);
    }
    while(continuar);

}

int random()
{
    srand( (unsigned)time(NULL) );

    return (1 + rand()%1000);
}

void dicas(int num, int password, int tentativas)
{
    if(num > password)
                printf("O numero sorteado e menor que %d\n\n", num);
    else
        if(num < password)
            printf("O numero sorteado e maior que %d\n\n", num);
        else
            printf("Parabens! voce acertou o numero em %d tentativas!\n\n", tentativas);
}

 

Link para o comentário
Compartilhar em outros sites

Olhando por alto o principal erro é que você declarou 2 funções main, o programa em c deve ter apenas uma função main para indicar onde inicia a execução do programa. Não sei dizer se em C ainda é uma boa pratica abrir a função main com void main() ou int main(void) apesar de ambos funcionarem.

Link para o comentário
Compartilhar em outros sites

Cara esta funcionando

 

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

//int main(void)
//{
// char url[]="char.txt";
// char ch;
// FILE *arq;
//
// printf("num: ");
// ch=getchar();
//
// arq = fopen(url, "w");
// if(arq == NULL)
//  printf("Erro, nao foi possivel abrir o arquivo\n");
// else{
//  fputc(ch, arq);
//  fclose(arq);
// }
//
// return 0;
//}

int random();
void dicas(int num, int password, int tentativas);

void main()
{
    int continuar=1,
        password,
        tentativas,
        num;

    do
    {
        system("cls || clear");
        printf("Sorteando numero entre 1 e 1000...\n");
        password = random();

        printf("Comecou! Tente adivinhar o numero!\n\n");
        tentativas = 0;

        do
        {
            tentativas++;
            printf("Tentativa %d: ", tentativas);
            scanf("%d", &num);
            dicas(num,password,tentativas);
        }
        while( num != password);

        printf("Digite 0 para sair, ou qualquer outro numero para continuar: ");
        scanf("%d", &continuar);
    }
    while(continuar);

}

int random()
{
    srand( (unsigned)time(NULL) );

    return (1 + rand()%1000);
}

void dicas(int num, int password, int tentativas)
{
    if(num > password)
                printf("O numero sorteado e menor que %d\n\n", num);
    else
        if(num < password)
            printf("O numero sorteado e maior que %d\n\n", num);
        else
            printf("Parabens! voce acertou o numero em %d tentativas!\n\n", tentativas);
}

Não sei o que você tentou fazer naquela função main secundaria mas deve ser algo relacionado a guardar informações da jogada como uma especie de recorde de menor tentativa, tente implementar isso agora.. faça uma função recorde ou algo parecido.

Link para o comentário
Compartilhar em outros sites

@SantosRodrigues00 Acho que você tentou testar duas ideias diferentes (só para ver se funciona), mas acabou colocando cada uma dentro de um método main. Como o @Benjamin Breeg disse, só pode ter um método main. Se você quiser testar ideias, coloque cada uma dentro de uma função e chame elas de dentro do método main.

 

Algo assim:

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

#define limparTela system("clear")  // No Windows mude para "cls"

void escreverArquivo();

void jogarAdivinhacao();

void dicas(int numero, int senha, int tentativas);

int main() {
    // Descomente o que quer fazer
//    escreverArquivo();
//    jogarAdivinhacao();
    return 0;
}

void escreverArquivo() {
    char nomeArquivo[] = "char.txt";
    char letra = ' ';

    FILE *arquivo = NULL;

    printf("Letra: ");
    scanf(" %c", &letra);

    arquivo = fopen(nomeArquivo, "w");

    if (arquivo == NULL) {
        printf("[]: Erro ao abrir o arquivo. \n");
        return;
    }

    fputc(letra, arquivo);
    fclose(arquivo);
}

void jogarAdivinhacao() {
    int continuar = 0;
    int secreto = 0;
    int chute = 0;
    int tentativas = 0;

    srand((unsigned) time(NULL));

    do {
        limparTela;
        printf("Sorteando número [ 1..1000 ] ... \n");
        secreto = rand() % 1000 + 1;

        printf("Começou! Tente adivinhar o número. \n");
        tentativas = 0;

        do {
            tentativas += 1;
            printf("Tentativa [%i]: ", tentativas);
            scanf(" %i", &chute);
            dicas(chute, secreto, tentativas);
        } while (chute != secreto);

        printf("1 - Jogar de novo \n");
        printf("0 - Sair \n");
        printf("> ");
        scanf(" %i", &continuar);
    } while (continuar == 1);
}

void dicas(int numero, int senha, int tentativas) {
    if (numero > senha) {
        printf("O número sorteado é menor que %d. \n", numero);
    } else if (numero < senha) {
        printf("O número sorteado é maior que %d. \n", numero);
    } else {
        printf("Parabéns! voce acertou o número em %d tentativas! \n", tentativas);
    }
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...