私は注文プログラムを行っており、製品のバイナリ検索ツリーを持っています。アイテムには、製品名、在庫数量、注文数量、および価格が含まれています。注文を作成すると、選択した商品の注文数量が注文に応じて増加します。
ツリーを通過し、各アイテムの注文数量によって在庫数量を減算し、明らかに注文数量を再び 0 に設定する、batchUpdate と呼ばれる関数を作成する必要があります。新しい注文が作成されると注文数量が更新されますが、何らかの理由で何も起こりません。ここにいくつかのスニペットがあります:
void BatchUpdate(PTree * pt) //PTree is a typedef, the tree
{
if (PTreeIsEmpty(pt))
puts("Nothing to update!");
else
{
puts("test"); //just for debug, it is still being displayed
TraverseP(pt,MinusStock); //Traverses the tree, and applies function
//MinusStock to each item in the node
}
}
void MinusStock(Prdct C) //Prdct is a typedef of struct containing details
{
C.StockQ = C.StockQ - C.OrderQ;
C.OrderQ = 0;
}
void TraverseP(const PTree * ptree, void (* pfun)(Prdct item))
{
if (ptree != NULL)
InOrderP(ptree->root,pfun);
}
static void InOrderP(const PNode * root, void (* pfun)(Prdct item))
{
if (root != NULL)
{
(*pfun)(root->item);
InOrderP(root->left, pfun);
InOrderP(root->right, pfun);
}
}
エラーは発生せず、トラバースは無視され、puts("test") が表示されます