2

这是我想要做的。我从用户那里得到 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 条完整记录存储到数组中,所以当我创建一个显示记录的函数时,我可以只给出一个索引号,以便它显示存储在该索引中的记录?

感谢您的时间。

4

2 回答 2

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(指向kinside main(),这就是为什么students没有被填充。

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

于 2013-06-10T13:29:57.793 回答
0

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

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

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

要扫描数组的所有元素,请使用以下形式的循环

for(i=0; i<5; i++)
{
    inputdetails(&students[i], i);
}

希望有帮助。

于 2013-06-10T13:56:47.947 回答