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_quantityarticle->act_quantity(当 LHS 是指针时)

于 2013-05-30T16:11:42.720 回答
6

当您引用指向结构的指针时,您需要

article->act_quantity

或者

(*article).act_quantity
于 2013-05-30T16:11:20.923 回答
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 回答
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 回答
0

您不必返回指向该结构的指针,因为它仍将与输入保持相同。您将地址传递给函数,然后使用此地址处的内容。在这种情况下,无需返回与结构相关的任何内容

article是一个指针,因此你不能只使用article.act_quantity并且你应该替换.->

article->act_quantity

于 2013-05-30T16:11:25.187 回答
0

使用箭头运算符通过结构指针访问结构的成员。但必须有有效的记忆。

于 2013-05-30T16:17:37.277 回答
0

这:

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

行不通,note是一个字符数组,你不能服从它。你需要:

strcpy(article->note, "act_quantity insufficient");
于 2013-05-30T16:24:12.570 回答
0
  • 它仍然给我一个错误:“一元'*'的无效类型参数(有'int')”

因为你写*article->act_quantity而不是article->act_quantity. 修理它

于 2013-05-30T16:48:18.453 回答