微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将新项目添加到 C 中的结构数组

如何解决将新项目添加到 C 中的结构数组

我有一些结构如下:

typedef struct {
    char debutAge[15];
    char finAge[15];
} Age;

typedef struct {
    char type[15];
    char composants[50];
    Age utilisation;
} Categorie;

typedef struct {
    int code;
    char nom[30];
    float prix;
    Categorie med;
    int quantitie;
} Medicament;

#define MAX 100
typedef Medicament Pharmacie[MAX];
Pharmacie P;
int nb=0; 

在我的主函数中,我试图向 Pharmacie P 数组添加一个新元素,这是我尝试的:

void main() 
{  
    Medicament m = Saisir(); 
    ajouterMedicament(P,nb,m);
    afficherMedicaments();
}

int ajouterMedicament(Pharmacie *ph,int *nb,Medicament m) {
    int i;

    for (i = 0; i < *nb; i++) {
        if (m.code == ph[i].code) {
            ph[i].prix = m.prix;
            ph[i].quantitie = m.quantitie;
        }
        return 1;
    }
    
    if (*nb < MAX) {
        ph[*nb] = m;
        *nb += 1;
        return 1;
    }
    return 0;
}

但我在这一行遇到错误mif (m.code == ph[i].code) { :

expression must have struct or union type

我该如何解决这个问题?

解决方法

您不需要将第一个参数声明为 Pharmacie *Pharmacie 是数组的 typedef,因此您无需添加 *

int ajouterMedicament(Pharmacie ph,int *nb,Medicament m) {

并且在调用中,您需要将指针传递给 nb 以便它可以更新:

ajouterMedicament(P,&nb,m);

一般来说,当您将 typedef 用于指针类型时,会让人感到困惑,并且您遇到了这种情况。我建议不要这样做。见Is it a good idea to typedef pointers?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?