-1

所以我刚开始学习 C 中的结构类型,但我有点困惑。我正在处理一个很长的程序,我不确定如何使用函数内部的静态变量(例如称为 nextinsert)将名称和年龄插入到数组中下一个未使用的元素中,以记住在哪里下一个未使用的元素是。

这是我的插入功能代码。

static void insert (struct person people[], char *name, int age)
{
  static int nextfreeplace = 0;
  static int nextinsert = 0;
  /* put name and age into the next free place in the array parameter here */
4

2 回答 2

2

对于您的问题“如何插入姓名和年龄”,请使用:

strcpy(people[nextfreeplace],name);
people[nextfreeplace].age = age;

您可能需要包含string.hfor strcpy

于 2013-10-24T09:48:02.450 回答
1

为什么不让它变得更简单:与其尝试跟踪insert函数内部的索引,您已经在main函数内部拥有索引。因此:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* these arrays are just used to give the parameters to 'insert',
   to create the 'people' array */
#define HOW_MANY 7
#define MAXSTRLEN 32

/* declare your struct for a person here */
struct person
{ 
    char name [MAXSTRLEN];
    int age;
};

static void insert (struct person *people, char *name, int age)
{
  strncpy(people->name, name, MAXSTRLEN);
  people->age = age;

}

int main(int argc, char **argv) {
  // Move arrays here; if they are global instead, 
  // there would be need to pass name and age to insert()
  char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim",
              "Harriet"};
  int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24};
  /* declare the people array here */
  struct person people[12]; 

  int i;
  for (i =0; i < HOW_MANY; i++) 
  {
    insert (&people[i], names[i], ages[i]);
  }

  /* print the people array here*/
  for (i =0; i < HOW_MANY; i++)
  {
     printf("%s\n", people[i].name);
     printf("%d\n", people[i].age);
  }

  return 0;
}

语法people->name是. (*people).name也就是说,您取消引用指针以获取实际的结构(*people),然后访问结构编号;由于运算符优先级规则,您需要在 . 周围加上括号*people

我不确定您对指针有多熟悉,但在 C 中,这很常见(将指向结构的指针传递给函数,然后structure->member在该函数内部使用。

当然,如果你的整个“练习”都围绕着学习静态变量,这可能没有什么价值。但是我在这里所拥有的可能比在函数内部保留一个静态变量来进行数组索引更可取。

于 2013-10-24T09:45:10.620 回答