我有这些结构
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);
}
我不能完全确定发生了什么,但是显然它总是替换第一个节点,而不是添加另一个节点。我有点迷路了