gpt4 book ai didi

c - 如何将记录存储在数组中?

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:20 25 4
gpt4 key购买 nike

这是我正在尝试做的。我从用户那里得到 3 个用户输入(姓名、年龄和性别),所有这些输入都是一条记录。例如 name=John, age= 15, gender= M ,这是名为 John 的人的记录。

我正在尝试像上面的示例一样制作 5 条记录,并且我正在尝试将其存储到一个数组中。问题是我不知道该怎么做。

这是我到目前为止所做的:

#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));


}

}

我该怎么做?我怎样才能将 1 条完整记录存储到数组中,所以当我创建一个显示记录的函数时,我可以只给出一个索引号,这样它就会显示存储在该索引中的记录?

感谢您的宝贵时间。

最佳答案

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 的数组。最后,在循环内,您不断重新分配相同临时 struct 的元素(指向 main() 内的 k,即为什么 students 没有被填满。

我将 inputdetails 更改为一次读取一个条目。现在 main() 负责数据的放置位置:它依次传递指向 students[] 的每个元素的指针,以及学生的序号用于打印目的。

关于c - 如何将记录存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com