Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

gaspar1423

Lista de ficheiros

Mensagens Recomendadas

gaspar1423

Boas,

Preciso de ajuda numa função para um projecto que me esta a dar muitas dores de cabeça  :wallbash:

Eu preciso de criar uma lista de ficheiros e cada ficheiro tem de ter uma lista de palavras chaves associadas e ele com um determinado peso.

eu ja consigo criar a a lista de ficheiros com o ficheiro e o tamanho maximo de palavras que este pode ter.

O meu problema é que a função de inserção de palavras não está a funcionar  :thumbsup:

Estas são as minhas estruturas:

#define MAX 50

//estruturas principais
typedef struct keyword{
char palavra[MAX];
int peso;
struct keyword *next_pal;
}KEYWORD;

typedef struct file{
char nomef[MAX];
int size;
struct file *next;
KEYWORD *prim;
}FILES;

typedef struct file_list
{
char nome_list[MAX];
int num_files;
FILES *prim;
}FILELIST;

E esta a minha função de inserção:

void insert_word(FILELIST *fl, FILES *f, KEYWORD *word, int peso){
KEYWORD *pnew=NULL, *ptemp=NULL, *pant=NULL;
int i=0/*, num_palavras=0*/;
char nome[MAX];
char pal[MAX];

for(i=0;i<fl->num_files;i++)
{
	printf("Em que ficheiro que introduzir as palavras chave?\n");
	fgets(nome,MAX,stdin);
	nome[strlen(nome)-1] = '\0';
	if(search_file(fl, nome)==NULL)
	{
		printf("Ficheiro nao existe!");
		return;
	}
	else {
		pnew=(KEYWORD *)malloc(sizeof(KEYWORD));
		strcpy(pnew->palavra,pal);
		pnew->peso=peso;

		printf("O ficheiro %s tem %d palavras para inserir\n", nome,f->size);

		if (f->prim==NULL){
			//inserção se lista esta vazia
			pnew->next_pal=NULL;
			f->prim=pnew;
		}
		else{
			ptemp=f->prim;
			pant=f->prim;

			if(ptemp->next_pal != NULL && (ptemp->peso)<(pnew->peso)) {
				pant=ptemp;
				ptemp=ptemp->next_pal;
			}
			if(pant==f->prim && ptemp==f->prim){	//insercao a cabeca
				pnew->next_pal=ptemp->next_pal;
				f->prim=pnew;
			}
			else 
			{
				if (ptemp->next_pal==NULL && (pnew->peso)>(ptemp->peso)) //insercao no fim
				{
					pnew->next_pal==NULL;
					ptemp->next_pal=pnew;
				}
				else {		//insercao ordenada
					if((pnew->peso)>(ptemp->peso)){
						pnew->next_pal=ptemp->next_pal;
						pant->next_pal=pnew;
					}

				}

			}
			printf("Palavra introduzida com sucesso!");
		}
	}
}
}

Alguém me pode dizer o que está mal?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Nao inicializaste pal ...

                        strcpy(pnew->palavra,pal);


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Esta inicializada como

char pal[MAX];

Isso é definicao. Para inicializacao devia ser qualquer coisa como

char pal[MAX] = "quarenta e dois";


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gaspar1423

Ja descobri uma grande erro que acho que era o que crashava tudo.

n estava a passar o conteudo do f para o ciclo de inserção e isso fazia com que batesse mal  😳

obrigado a todos pela ajuda  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.