【问题标题】:Using structs as parameters使用结构作为参数
【发布时间】:2013-11-09 17:48:56
【问题描述】:

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

我还有静态类型的变量 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]);
}

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

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

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

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

【问题讨论】:

  • 您正在更新原始结构的副本。您需要从函数中返回修改后的结构(或使用Joachim's answer)。

标签: c struct


【解决方案1】:

具有功能

void person_info(struct person p1)

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

void person_info(struct person *p1)

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

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

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

事实上,考虑到你对数组的基本误用,我怀疑你会立即理解指针等概念,所以我建议你也去阅读一些关于该主题的书籍和教程。

【讨论】:

  • 是的,我现在意识到 scanf 是错误的,最后不应该有任何 [7]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多