Узел всегда вставляется в первый узел дерева GLib - PullRequest
0 голосов
/ 29 марта 2019

У меня есть эти структуры

struct faturacao{
  GTree* meses[12];
};


struct info{
  float valores[6];
  int vendas[3];
  int quantidade[3];
};

Инициализация:

Faturacao initFaturacao(){
  Faturacao fat = malloc(sizeof(struct faturacao));

  for(int i = 0; i < 12; i++){
    fat -> meses[i] = g_tree_new(cmpStrings);
  }

  return fat;
}

Вставка:

void insereFaturacao(Faturacao f, Venda v){
  gpointer ptr = g_tree_lookup(f -> meses[(v -> mes) - 1], (v -> produto));

  Info temp;
  if(ptr == NULL){
    temp = calloc(1, sizeof(struct info));
  }
  else{
    temp = (Info)ptr;
  }

  atualizaInfo(temp, v);

  g_tree_insert(f -> meses[(v -> mes)-1], (v -> produto), temp);

  printf("%d\n", g_tree_nnodes(f -> meses[0]));

}

AtualizaINfo:

void atualizaInfo(Info i, Venda v){
  int index = (v -> promocao == 'N') ? 2 + v -> filial : v -> filial - 1;
  i -> valores[index] += v -> preco * v -> quantidade;
  i -> vendas[(v -> filial)- 1]++;
  i -> quantidade[(v -> filial) - 1] += v -> quantidade;
}

ОбаVenda и Info - это указатели на структуры, а produto - это char * в структуре.

Вот cmpStrings

int cmpStrings (const void *a, const void *b){
  char* c1 = (char*) a;
  char* c2 = (char*) b;
  return strcmp(c1, c2);
}

Я не совсем уверен, что происходит, но, очевидно, он всегда заменяет первый узел, вместо этогодобавить еще один.Я немного потерян

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...