c - 以指针为参数的数组函数

标签 c arrays pointers structure function-pointers

背景:我们在图书馆里。我们写了两个结构:Livre(英文书)和 titre(书名)、nombre_pages(页数)和 statut(是否借过?)

Lecteur(读者)(nom = 姓名;prenom = 名字;nb_livres = 读者已经预订的书籍数量;以及一个 struct livres)

我正在尝试执行一个函数,其中的参数是: 1) Array with different readers (结构Lecteur) 2)数组的大小(带指针因为会进化) 3) 数组的要删除的reader(结构Lecteur)。

这是我的功能:

    #include <stdio.h>

struct Livre {
    char titre[100];
    int nombre_pages;
    int statut; // Book already borrowed = 1, Available = 0
};

struct Lecteur {
    char nom[100];
    char prenom[100];
    int nb_livres; // le nombre de livres dans le tableau "livres"
    struct Livre* livres[100]; // livres deja empruntes (eventuellement rendus)

};

void desabonnement(struct Lecteur * plecteurs[], int * nombre_lecteurs,
  struct Lecteur * lect) {

  struct Lecteur empty = {  // Cette variable me permettra de transformer la valeur qui m'intérésse pas
    0
  };
  int i = 0;
  int j = 0;

  while ((plecteurs[i]->nom != lect->nom) &&
    (plecteurs[i]->prenom != lect->prenom)) {
    i++;
  }
  while (j < plecteurs[i]->nb_livres) {
    plecteurs[i]->livres[j]->statut = 0;
    j++;
  }
  while (i < * nombre_lecteurs) {
    *plecteurs[i] = *plecteurs[i + 1];
    i++;
  }

  *plecteurs[i] = empty;

}



int main() {

    struct Livre l1 = { "boom" , 50 , 1 };
    struct Livre l2 = { "bim" , 50 , 1 };
    struct Livre l3 = { "chaud" , 50 , 0 };
    struct Livre l4 = { "tcho" , 50 , 1 };
    struct Livre l5 = { "braa" , 50 , 1 };

    struct Livre *p1 = & l1;
    struct Livre *p2 = & l2;
    struct Livre *p3 = & l3;
    struct Livre *p4 = & l4;
    struct Livre *p5 = & l5;





    struct Lecteur le1 = { "Boso" , "Nen" , 2 , {&l1, &l2} };;
    struct Lecteur le2 = { "Jogar" , "Elo" , 1 , {&l3} };;
    struct Lecteur le3 = { "marche" , "silteplait" , 2 , {&l4, &l5} };;


    struct Lecteur *tableau_test[3] = {&le1, &le2, &le3};
    int le_nombre = 3;


    desabonnement(tableau_test, &le_nombre, &le3);


        printf(" %d ", tableau_test[0]->nb_livres);




    return 0;
}

最佳答案

问题在while (i < * nombre_lecteurs)行功能void desabonnement(struct Lecteur * plecteurs[], int * nombre_lecteurs, struct Lecteur * lect) .这应该是 while (i+1 < * nombre_lecteurs) .

查看完整的工作代码 here .

注意:在您的实际代码中,您应该减少 le_nombre当删除完成以反射(reflect)新大小时(我在 corrected code here 中完成了此操作)。

关于c - 以指针为参数的数组函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49046573/

相关文章:

c - C 中指向指针的指针问题

c - 如何从C中的用户输入中读取字符串,放入数组并打印

c - 如何将字符串转换为 C 中 ASCII 的十六进制代码

c++ - C 程序会在 C++ 工作区中编译吗?

python - 当数组元素和目标数据类型不同时,numpy.where() 方法如何处理相等条件

c - C 中不同 char** 的指针

iphone - 对齐指针

php - 如何使用 foreach 循环并在固定位置设置小的变化?

java - 将数组值传递给单独的方法

c - 程序中的指针误导