Ir ao conteúdo
  • Cadastre-se
Bruxo2

Problema com Vetor de Struct

Recommended Posts

Boa noite, estou criando uma tabela Hash do zero(para aprender bem), mas estou trancado com algo que parece ser bem simples, o vetor em si, a tabela hash que tenho que fazer tem que guardar um numero, uma string e um ponteiro para um possivel tratamento de colisão por encadeamento, porém estou trancado na hora de imprimir a tabela hash(para testes) e estou até com medo que eu tenha errado em algo na implementação do vetor, bom, sem mais delongas, segue parte do codigo. Ah, ele pega as chaves de um arquivo .txt, como ele tem mais de 250 mil entradas, eu coloquei um limite de 10 hehe

hash.h:

#ifndef HASH_H
#define HASH_H

typedef struct chave {
int numero;
char *string;
struct chave *prox; // será usado para o tratamento de colisão encadeado
} Chave;
#endif



void imprimeVetor(int maximo, Chave *v);

int hashModelo(char *chav, int modulo);

hash.c

#include "hash.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {
int posições = 100;
Chave vet1[posições];
int numeroElementos = 0;
int fatorCarga = 0/100;

int i = 0;
char *aux, *aux1;
int aux2;
FILE *fp;



if((fp = fopen( "chaves2M.txt", "r")) == NULL ) {
printf("Arquivo não encontrado\n");
exit(1);
}

Chave novo;
while(!feof(fp) && i<10){

fgets(aux,150, fp);
aux1 = strtok(aux, " ");
aux2 = atoi(strtok(NULL, " "));
novo.numero = aux2;
novo.string = aux1;
novo.prox = NULL;
vet1[hashModelo(aux1, posições)] = novo;

i++;

}
imprimeVetor(10, vet1);

}

funcoes.c

#include "hash.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int hashModelo(char *chav, int modulo){
int h = 0;
int n,i;
n = strlen(chav);
for(i=0;i<n;i++){
h += chav[i]*31*n;
}
return h%modulo;
}

//funcao hash que utiliza as strings para formar uma, adicionado o modulo para se adaptar ao tamanho da tabela.

void imprimeVetor(int maximo, Chave *v){
int i =0;

for(i=0;i<maximo;i++){
printf("%d\n", v->numero[i]);

}

}

//funcao pra imprimir o valor com um maximo pré-determinado, para testes apenas.

Dicas, soluções, estou aberto.

O meu problema tá mais no vetor, não consigo imprimir ele, mas qualquer dica seria interessante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruxo,

aux precisa ser alocado, seja de forma estática ou dinâmica. O mesmo para string do seu struct. E para atribuir C-strings, use strcpy().

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, nas strings eu consegui arrumar tudo, mas agora to com problema na funcao imprimeVetor, não consigo passar esse vetor para a função de jeito nenhum.

No vet1 eu troquei por &vet1.

Ele dar estes erros:

hash.c: In function ‘main’:
hash.c:44:2: warning: passing argument 2 of ‘imprimeVetor’ from incompatible pointer type [enabled by default]
In file included from hash.c:1:0:
hash.h:13:6: note: expected ‘struct Chave *’ but argument is of type ‘struct Chave (*)[(sizetype)(posições)]’
funcoes.c: In function ‘imprimeVetor’:
funcoes.c:22:29: error: subscripted value is neither array nor pointer nor vector

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×