如何在数组中存储记录?

时间:2013-06-10 13:24:50

标签: 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];
    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条记录存储到数组中,所以当我创建一个显示记录的函数时,我只能给出一个索引号,这样它就会显示存储在该索引中的记录?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

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的元素(指向k内的main(),这就是students未填充的原因

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

答案 1 :(得分:0)

您的结构和数组声明是正确的。 (注意:我假设您的输入详细信息与上面显示的dasblinkenlight类似。)

要扫描数组的单个元素(例如,数组的第一个元素),请使用

inputdetails(&students[0], int pos);

要扫描数组的所有元素,请使用

形式的循环
for(i=0; i<5; i++)
{
    inputdetails(&students[i], i);
}

希望有所帮助。