这次是关于使用struct作为参数。在这个任务中,我必须创建一个FIFS队列系统。静态人员队列的大小为10.这意味着只有10个人可以在队列中。
我还有类型为static的变量head,tail和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]);
}
到目前为止一切都很好,但现在我必须先将struct person p1放入队列中,首先使用strcpy-function复制inf,然后将其放入数组人员队列[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,即此文件。
答案 0 :(得分:1)
使用功能
void person_info(struct person p1)
结构按值传递,即复制并且您只修改此副本。您希望通过引用传递它,它在C中通过作为指针传递来完成:
void person_info(struct person *p1)
顺便说一句,你在函数中scanf
次调用非常是错误的。它将在结构实例中的超出数组。只需使用例如。
scanf("%6s", p1.first_name);
继续阅读你的问题,似乎你对如何使用数组有一些非常基本的误解,所以我建议你回去并在最近的书或教程中重新准备关于数组和数组索引的章节。
事实上,考虑到你对数组的基本误用,我怀疑你会立即理解指针这样的概念,所以我建议你去阅读一些有关该主题的书籍和教程。