所以我刚开始在C中学习struct类型,但我有点困惑。我有一个很长的程序,我正在研究并且我不确定如何使用静态变量(例如,名为nextinsert)将名称和年龄插入到arrray中的下一个未使用的元素中在函数内部记住下一个未使用元素的位置。
这是插入功能的代码。
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 */
答案 0 :(得分:2)
有关“如何插入姓名和年龄”的问题,请使用:
strcpy(people[nextfreeplace],name);
people[nextfreeplace].age = age;
您可能需要string.h
包含strcpy
。
答案 1 :(得分: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
。
当然,如果你的整个“练习”围绕着学习静态变量,那么这可能没什么价值。但是我在这里可能更喜欢在函数内部保留一个静态变量来进行数组索引。