insert(char * key, struct node *leaf, int x)
{
if (x==1) //Customer
{
if( strcmp(leaf->customer.IDNo,root->customer.IDNo)==0 )
{
*leaf = (struct node) malloc(101);
*leaf->customer.IDNo = key;
/* initialize the children to null */
(*leaf)->left = 0;
(*leaf)->right = 0;
}
else if(strcmp(key,(*leaf)->customer.IDNo)<0)
{
insert( key, &(*leaf)->left );
}
else if(strcmp(key,(*leaf)->customer.IDNo)>0)
{
insert( key, &(*leaf)->right );
}
}
else //Product
{
if( strcmp(leaf->product.ProdName,root->product.ProdName)==0 )
{
*leaf = (struct node) malloc(101);
(*leaf)->product.ProdName = key;
/* initialize the children to null */
(*leaf)->left = 0;
(*leaf)->right = 0;
}
else if(strcmp(key,(*leaf)->product.ProdName)<0)
{
insert( key, &(*leaf)->left );
}
else if(strcmp(key,(*leaf)->product.ProdName)>0)
{
insert( key, &(*leaf)->right );
}
}
}
45,64转换为非标量类型的请求 46赋值使用指针生成整数而不进行强制转换 48,49,51,53,55,57,65,67,68,70,72,74,76无效类型参数 - &gt; (有结构节点) 53,57,72,76函数'insert'的参数太少
Node *search(char * key, struct node *leaf,int x)
{
struct node * y;
if (x==1)
{
if( leaf != 0 )
{
if(strcmp(key,leaf->customer.IDNo)==0)
{
y= leaf;
}
else if(strcmp(key,leaf->customer.IDNo)<0)
{
y= search(key, leaf->left);
}
else
{
y= search(key, leaf->right);
}
}
}
else if (x==2)
{
if( leaf != 0 )
{
if(strcmp(key,leaf->product.ProdName)==0)
{
y= leaf;
}
else if(strcmp(key,leaf->product.ProdName)<0)
{
y= search(key, leaf->left);
}
else
{
y= search(key, leaf->right);
}
}
}
else y= 0;
return y;
}
94,98,112,“搜索”功能的参数太少了
在多行上发生的错误是相似的,所以我需要的是如何修复其中一个的说明,我可以做其余的。
答案 0 :(得分:4)
你有许多问题需要混淆指针和他们指向的内容。
例如,在此代码中:
*leaf = (struct node) malloc(101);
你有几个严重的问题:
更重要的是,问题是你试图改变插入函数内部的叶子指针,但是正在通过值传递叶子。为了更改叶子指针指向的节点,您应该传入指向叶子指针的指针,而不是叶子指针本身。尝试更改签名以使用struct node** leaf
,然后更新代码,以便在代码中重新分配叶子指向的指针。
这里有许多其他指针错误,但最终我认为它们都源于令人困惑的指针和他们指出的内容。修复代码时,请务必记住是否要更改指针指向的对象,或者首先指向哪个对象。
希望这有帮助!