0

学校のプロジェクトのためにいくつかの関数を作成し、それらを機能させていますが、その理由がわかりません。それらは同一である必要がありますが、一方がcurrent-> linkをチェックし、もう一方がcurrent自体をチェックする場合にのみ機能します。両方のループを現在の!= NULLにするべきではありませんか?

2つの関数は、次のようにmainで呼び出されます。

customerHead = fillCart(limit, lowLevelInv); //fills linked list
totCart(customerHead, lowLevelInv);                 
printCart(customerHead, lowLevelInv);

これは、whileループが現在の!=NULLをチェックする場合にのみ機能します

int totCart(OrderPtr head, inventory lowLevelInv[])
{
OrderPtr current;
current = head;
int tot = 0;

while(current != NULL)
{
    tot += lowLevelInv[current->itemID].cost*current->qtyReceived;
    current = current->link;
}
cout<<"Cart total is: "<<tot<<endl;
return tot;
}

これは、whileループがcurrent-> link!=NULLをチェックする場合にのみ機能します

void printCart(OrderPtr head, inventory lowLevelInv[])
{
OrderPtr current;
current = head;

cout<<"you have ordered: \n";

while(current->link != NULL);
{
    cout<<current->orderID<<": "<<current->qtyReceived<<" "    <<lowLevelInv[current->itemID].name<<" for "<<lowLevelInv[current->itemID].cost*current->qtyReceived<<endl;
    current = current->link;
} 
}
4

1 に答える 1

2

問題はここにあるようです:

while(current->link != NULL);
{
    cout<<current->orderID<<": "<<current->qtyReceived<<" "    <<lowLevelInv[current->itemID].name<<" for "<<lowLevelInv[current->itemID].cost*current->qtyReceived<<endl;
    current = current->link;
} 

注意深く見ると、「while」ステートメントの制御ステートメントの後に偽のセミコロンがあります。これは、current-> linkがnullでない場合、currentまたはcurrent-> linkを変更するものがないため、プログラムがハングすることを意味します。

それが実際にあなたの問題ではない場合(たとえば、コピーパスタの問題のため)、リストを作成する方法と、「機能しない」とは具体的に何を意味するのかを示す必要があります。

于 2012-11-28T00:44:10.733 に答える