所以我试着做一个函数,取aGTree*a(每个Tree节点都是astruct User)和aid,它会搜索这个user并增加一个变量!(学校项目)
在这里的帮助下,我成功地做到了,但我没有意识到它没有增加。
结构如下:

typedef struct user {
    int id;
    char username[256];
    int post_count;
    char short_bio[16384];
    int reputation;
}*USER;

typedef struct TCD_community{
    GTree* res;
    GTree* quest;
    GTree* users; /
}TCD_community;

typedef struct TCD_community * TAD_community;

TAD_community tq;

函数是(由stackoverflow用户帮助):
void incrementaPost(GTree* a,int id){

    gpointer ptr = g_tree_lookup ( a , &id);

    struct user *u = (struct user *) ptr;

    if(u){
        u->post_count++;
    }
}

我对梅恩这样说:
incrementaPost( tq -> users, 703994);

输出:
Id 703994
Name N.Sinha
post_count 0
reputation 51

预期:
Id 703994
Name N.Sinha
post_count 1
reputation 51

最佳答案

请注意,必须正确构造GTree*才能进行搜索。
首先使用专用搜索功能构建树:

GTree   *tree;
tree = g_tree_new(MySearchFunction);

在哪里?
g_tree_new ()
GTree * g_tree_new (GCompareFunc key_compare_func);
创建新的GTree
参数:
key_compare_func
用于对GTree中的节点进行排序的函数。它应该会回来
与标准值类似的值strcmp()函数-0如果
参数相等,如果第一个参数出现,则为负值
在第二个参数之前,如果第一个参数出现,则为正值
第二次之后。
然后必须使用g_tree_insert ()插入对象
g_tree_insert ()
void g_tree_insert (GTree *tree, gpointer key, gpointer value);
GTree中插入键/值对。
如果给定的密钥已经存在于GTree它的对应值
设置为新值。如果您在
创建GTree,使用该函数释放旧值。如果
您在创建GTree时提供了一个key_destroy_函数,通过
使用该函数释放键。
参数
tree
aGTree
key
插入的键
value
与键对应的值
只有这样,才能使用g_tree_lookup进行搜索。
Check this simple example-如何构造GTree*,插入元素,通过g_tree_lookup进行搜索,并通过g_tree_traverse遍历树。

关于c - 为什么不增加?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49588612/

10-11 19:42