Jump to content
Fórum Script Brasil
  • 0

Erro no programa


Question

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;
}

 

Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148719
    • Total Posts
      644508
×
×
  • Create New...