0

这次是关于使用结构作为参数。在这个任务中,我必须创建一个 FIFS 队列系统。静态人员队列的大小为 10。这意味着队列中只能有 10 人。

我还有静态类型的变量头、尾和 nbr_elem。tail 变量用于将人员添加到特定位置。反之亦然,用于可变头。nbr_elem 是队列中的人数。我认为您不需要更多信息来帮助我。现在的问题:

如何在函数中使用结构作为参数?这是我到目前为止所做的:

    static person queue[QUEUE_MAX_SIZE];
static int head = 0, tail = 0, nbr_elem = 0;
 struct  person
{
    char first_name[7];
    char sur_name[10];
    char pers_nbr[10];

};


void person_info(struct person p1){


    /*printf("First name: ");*/
    scanf("%s", &p1.first_name[7]);
   /* printf("Last name: ")*/;
    scanf("%s", &p1.sur_name[10]);
    /*printf("Id-number: ");*/
    scanf("%s", &p1.pers_nbr[10]);
}

到目前为止一切都很好,但现在我必须通过首先使用 strcpy 函数复制 inf 然后将其放入数组 person queue[QUEUE_MAX_SIZE] 我猜(?)

 void enqueue( person queue[QUEUE_MAX_SIZE])
{
    queue[person_info(p1.first_name[7])];
}

我什至不知道这是否是函数入队的一个好的开始,所以我需要一些帮助。以及如何在函数中使用静态人员队列[QUEUE_MAX_SIZE]?

我还有一个包含 typedef 人的头文件 queue.h。然后将头文件调用到该文件的 queue.c 中。

4

1 回答 1

1

带功能

void person_info(struct person p1)

该结构是按值传递的,即制作了一个副本,您只修改这个副本。您想通过引用传递它,这在 C 中是通过作为指针传递来完成的:

void person_info(struct person *p1)

顺便说一句,你scanf在函数中调用是非常错误的。它将写入结构实例中的数组之外。只需使用例如

scanf("%6s", p1.first_name);

继续阅读您的问题,您似乎对如何使用数组有一些非常基本的误解,因此我建议您返回并在最近的书籍或教程中重新准备有关数组和数组索引的一章。

事实上,考虑到您对数组的基本误用,我怀疑您是否会立即理解指针之类的概念,因此我建议您也去阅读一些有关该主题的书籍和教程。

于 2013-11-09T17:50:49.953 回答