2

ポインターを使用してパラメーターとして渡された構造体を変更しようとしていますが、うまくいきません。関数は整数を返す必要があるため、構造体を返すことはできません。関数内の構造体を変更するにはどうすればよいですか? これは私がこれまでに行ったことです:

typedef enum {TYPE1, TYPE2, TYPE3} types;

typedef struct {
                types type;
                int act_quantity;
                int reorder_threshold;
                char note[100];

}elem;

int update_article(elem *article, int sold)
{
    if(*article.act_quantity >= sold)
    {
        article.act_quantity = article.act_quantity - sold;
        if(article.act_quantity < article.act_quantity)
        {
            strcpy(article.note, "to reorder");
            return -1;
        }
        else
            return 0;
    }
    else if(article.act_quantity < venduto)
    {
        strcpy(*article.note, "act_quantity insufficient");
        return -2;
    }


}

構造体を変更しようとしたすべての行で、「エラー: メンバーの要求: 'act_quantity' in something not a structure or union'」というエラーが表示されます。

編集:「。」を使用しました。「->」の代わりに。今直しました。それでもエラーが表示されます:「単項 '*'の型引数が無効です('int'を持っています)」

4

9 に答える 9

11

演算子の優先順位の原因

*article.act_quantity

と解釈される*(article.act_quantity)

(*article).act_quantityorである必要がありますarticle->act_quantity(LHS がポインターの場合)

于 2013-05-30T16:11:42.720 に答える
6

構造体へのポインタを参照するときは、次のいずれかが必要です

article->act_quantity

また

(*article).act_quantity
于 2013-05-30T16:11:20.923 に答える
2

これで問題は解決するはずです

int update_article(elem *article, int sold)
{
    if(article->act_quantity >= sold)
    {
        article->act_quantity = article->act_quantity - sold;
        if(article->act_quantity < article->reorder_threshold)
        {
            strcpy(article->note, "to reorder");
            return -1;
        }
        else
            return 0;
    }
    else if(article->act_quantity < sold)
    {
        strcpy( article->note, "act_quantity insufficient");
        return -2;
    }
}
于 2013-05-30T17:25:37.113 に答える
2

ポインターを扱う場合ptr->memberは、ではなく、である必要があります。ptr.member

于 2013-05-30T16:11:10.987 に答える
2

に変更*article.act_quantityする(*article).act_quantityか、より良いものに変更しarticle->act_quantityます。演算子の優先順位により、ここに到達します...

于 2013-05-30T16:12:16.550 に答える
0

入力と同じままであるため、構造体へのポインターを返す必要はありません。関数にアドレスを渡し、このアドレスにあるものを操作します。この場合、構造体に関連するものを返す必要はありません

articleはポインタであるため、そのまま使用することはできず、次のようarticle.act_quantityに置き換える必要があり.ます->

article->act_quantity

于 2013-05-30T16:11:25.187 に答える
0
  • それでもエラーが表示されます:「単項 '*'の型引数が無効です('int'を持っています)」

*article->act_quantityの代わりに書くからですarticle->act_quantity。修理する

于 2013-05-30T16:48:18.453 に答える
0

これ:

strcpy(*article.note, "act_quantity insufficient");

動作しませnoteん。これは文字配列です。参照できません。必要なもの:

strcpy(article->note, "act_quantity insufficient");
于 2013-05-30T16:24:12.570 に答える