C 如何在数组中存储记录?
这就是我要做的。我从用户那里得到3个用户输入(姓名、年龄和性别),所有这些输入都是一个记录。例如name=John,age=15,gender=M,这是名为John的人的记录 我正试图制作5条像上面例子一样的记录,并试图将其存储到一个数组中。问题是我不知道怎么做 以下是我迄今为止所做的工作:C 如何在数组中存储记录?,c,arrays,record,C,Arrays,Record,这就是我要做的。我从用户那里得到3个用户输入(姓名、年龄和性别),所有这些输入都是一个记录。例如name=John,age=15,gender=M,这是名为John的人的记录 我正试图制作5条像上面例子一样的记录,并试图将其存储到一个数组中。问题是我不知道怎么做 以下是我迄今为止所做的工作: #include<stdio.h> #include<conio.h> #define Max 40 struct person{ char name[Max];
#include<stdio.h>
#include<conio.h>
#define Max 40
struct person{
char name[Max];
int age;
char gender;
};
void inputdetails(struct person *,struct person []);
main()
{
struct person students[5]; //created an array type person to store the records
struct person k;
inputdetails(&k,students); //passed the array in to the input details function
}
void inputdetails(struct person *q,struct person hello[])
{
int i=0;
for(;i<5;i++)
{
printf("Enter name\n");
gets(q->name);
printf("Enter age\n");
scanf("%d",&(q->age));
fflush(stdin);
printf("Enter gender\n");
scanf("%c",&(q->gender));
}
}
#包括
#包括
#定义最大值40
结构人{
字符名[Max];
智力年龄;
性别;
};
无效输入详细信息(结构人*,结构人[]);
main()
{
struct person students[5];//创建了一个数组类型person来存储记录
结构人k;
inputdetails(&k,students);//将数组传递给inputdetails函数
}
无效输入详细信息(结构人*q,结构人hello[])
{
int i=0;
对于(;iname);
printf(“输入年龄\n”);
scanf(“%d”和(q->age));
fflush(stdin);
printf(“输入性别”);
scanf(“%c”和(q->gender));
}
}
我该怎么做?如何将一条完整的记录存储到数组中,这样当我创建一个函数来显示记录时,我就可以给出一个索引号,这样它就可以显示存储在该索引中的记录了
谢谢您的时间。将
for
循环移动到main
,如下所示:
int main() {
struct person students[5]; //created an array type person to store the records
for (int i = 0 ; i != 5 ; i++) {
inputdetails(&students[i], i);
}
return 0;
}
void inputdetails(struct person *q, int pos) {
// Put all the data into q->...
printf("Enter name of student %d\n", pos);
// Do not use gets(), it's a security hazard
scanf("%39s", q->name);
...
}
当前实现创建了一个不必要的struct person k
,并在inputdetails
函数内运行循环。假设第二个参数指向大小为5的数组。最后,在循环中,您不断地重新分配同一个临时结构的元素(指向k
insidemain()
,这就是学生
没有被填充的原因
我将inputdetails
更改为一次读取一个条目。现在main()
负责数据的放置位置:它依次传递指向student[]
的每个元素的指针,以及用于打印的student序列号。您的结构和数组声明是正确的。(注意:我假设您的输入详细信息与上面显示的dasblinkenlight类似。)
要扫描数组的单个元素(例如,数组的第一个元素),请使用
要扫描数组的所有元素,请使用表单的循环
for(i=0; i<5; i++)
{
inputdetails(&students[i], i);
}
for(i=0;我没有真正理解你想说的。你能再解释一下吗?谢谢。@Shehan.W我编辑了答案,看看解释是否能让事情变得更清楚。
for(i=0; i<5; i++)
{
inputdetails(&students[i], i);
}