Ir para conteúdo
Fórum Script Brasil

GustavoBeck

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por GustavoBeck

  1. Está dando um erro no meu programa que é a base para criar um jogo da Forca, mas eu não consigo arrumar, e esse erro só acontece quando eu junto o main,forca.h e forca.c em um projeto .cbp, quando eu executo os 3 arquivos sozinhos funciona, mas preciso entregar para trabalho e preciso que funcione com o arquivo .cbp de projeto. alguém consegue me ajudar a resolver? Esse é o erro: "error: dereferencing pointer to incomplete type 'NoSecreto {aka struct noSecreto}' "

    Main: 

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "forca.h"
    void exibe()
    {
        printf("Desenvolvido por:\nGustavo Felipe Beck 18133");
        printf("\nLucas Miranda 18567\n\n");
    }
    
    int main()
    {
        exibe();
        NoSecreto * lstSecreta = inicializaListaSecreta();
        NoSecreto * sorteada;
        NoSecreto * usadas = inicializaListaSecreta();
        lstSecreta = carregaListaArquivo(lstSecreta,"palavras.dat");
        imprimeListaSecreta(lstSecreta);
    
          do{
            system("cls");
            exibe();
            imprimeListaSecreta(lstSecreta);
    
            sorteada= sorteiaPalavra(lstSecreta,usadas);
            if(sorteada!=NULL){
                printf("%s\n", sorteada->palavra);
                lstSecreta = retiraUmElemento(lstSecreta,sorteada->palavra);
            }else{
                printf("não existe palavra disponivel!\n\n");
            }
        }while(getchar()!='f');
    
    
    
    
        NoL * letras = inicializaListaSecreta();
    
        return 0;
    }

     

    Forca.c:

    #include <stdio.h>
    #include <string.h>
    #include "forca.h"
    
    struct noSecreto {
    int status;
    char palavra[31];
    char assunto[100];
    int num;
    struct noSecreto * prox;
    };
    
    struct noLetras
    {
        char letra;
        int estado;
        struct noSecreto * proximo;
    };
    
    NoSecreto * inicializaListaSecreta()
    {
        return NULL;
    }
    
    NoSecreto * inserePalavraSecreta(NoSecreto * l,char word[31],char subject[100])
    {
      NoSecreto * novo;
      novo = (NoSecreto *) malloc(sizeof(NoSecreto));
      novo->status = 0;
      strcpy(novo->assunto,subject);
      strcpy(novo->palavra,word);
      novo->prox = l;
      l = novo;
      return l;
    }
    void imprimeListaSecreta(NoSecreto *l)
    {
        NoSecreto * p;
        for (p = l; p!=NULL; p=p->prox)
        {
            printf("%0d | %30s | %30s | %d\n", p->status,p->palavra,p->assunto,p->num);
        }
    }
    NoSecreto * carregaListaArquivo(NoSecreto * l, char nomeArq[255])
    {
        const char ch[2]=";";
        char * token;
        int status;
        char palavra[31];
        char assunto[101];
        char * linha[1024];
        int n=0;
        FILE * fWords;
    
        fWords = fopen(nomeArq,"r");
        if(fWords==NULL){
            printf("Falha ao acessar base de dados!!!\n\n");
            exit(0);
        }
        while(fgets(linha,1024,fWords))
        {
            token = strtok(linha,ch);
            if(token!=NULL)
            {
                 strcpy(palavra,token);
            }
            token=strtok(NULL,ch);
            if(token!=NULL)
            {
                strcpy(assunto,token);
            }
            l = inserePalavraSecreta(l,palavra, assunto);
            l->num=n;
            n++;
        }
    
        fclose(fWords);
        return l;
    }
    int quantos(NoSecreto * l)
    {
        NoSecreto * p;
        int y=0;
        for (p = l; p!=NULL; p=p->prox)
        {
           y++;
        }
        return y;
    }
    
    int temPalavraNaoUsada(NoSecreto *l)
    {
        NoSecreto *p;
        for(p=l;p!=NULL;p=p->prox){
            if(p->status==0) return 1;
        }
        return 0;
    }
    
    NoSecreto * sorteiaPalavra(NoSecreto *l,NoSecreto *l2)
    {
        int tam = quantos(l);
        int aleatorio=0;
        int tentativas = 0;
        NoSecreto * p;
    
        while(temPalavraNaoUsada(l)){
            aleatorio = geraAleatorio(tam);
            p = retornaPalavraPos(l,aleatorio);
            if(p->status==0){
              {
                p->status = 1;
                return p;
                l2 = inserePalavraSecreta(p,p->palavra,p->assunto);
    
              }
    
            }
        }
        return NULL;
    }
    
    NoSecreto * retornaPalavraPos(NoSecreto *l, int pos)
    {
        int n=1;
        NoSecreto *p;
        for(p=l; p!=NULL; p=p->prox)
        {
            if(n==pos) break;
            n++;
        }
        return p;
    }
    
    int geraAleatorio(int maximo)
    {
        time_t t;
        int n=0;
        srand((unsigned) time(&t));
        n = (rand() % maximo)+1;
        return n;
    }
    
    NoSecreto * retiraUmElemento(NoSecreto * l, char palavra[31])
    {
        NoSecreto * ant = NULL;
        NoSecreto * p = l;
    
        while(p != NULL && p->palavra != palavra)
        {
            ant = p;
            p = p->prox;
        }
        if(ant == NULL)
           {
                l = p->prox;
           }
        else
        {
           ant->prox = p->prox;
        }
        free(p);
        return l;
    }
    

     

×
×
  • Criar Novo...