在C中导航结构数组

时间:2013-05-02 00:18:11

标签: c arrays struct

晚上好/上午/下午/下午,大家好。我目前对我的代码有点问题。我正在尝试创建一个名为student的结构数组,并且在解决如何从数组中指向一个结构时遇到问题。任何关于此事的指导都将非常感激。

的main.c

int main()
{

int n_students = 0;
struct student students[1000];
int closebool = 0;
int IDnum; 
int k;
char buffer[101];
char *studentName_tmp;

    do
    {
        scanf("%d", &operation_num);
        switch (operation_num)
        {
            case 0 :
            {

                closebool = 1;
                break;

            }
            case 1 :
            {
                scanf("%d %s", &IDnum, buffer);
                studentName_tmp = (char *) malloc (strlen(buffer)+1);
                strcpy (studentName_tmp, buffer);
                n_students = insert(students, n_students, IDnum, studentName_tmp);
                printf ("%d %s\n", students[n_students].ID, students[n_students].name);
                n_students++;

                break;
            }
        }
    }  while (closebool != 1);
return 0;
} 

student.c

int insert(struct student array[], int numberof_students, int IDnum, char *student_name)
{
    array[numberof_students].ID = IDnum;
    array[numberof_students].name = student_name;

    return 0;
}

这是我期望看到的输入和输出:(输入输入输出,在这种情况下)

1, 123弗雷德, 123弗雷德, 1, 234乔治, 234乔治, 1, 345亨利, 345亨利,

但是我看到了这个:

1, 123弗雷德, 123弗雷德, 1, 234乔治, 123弗雷德, 1, 345亨利, 123弗雷德,

2 个答案:

答案 0 :(得分:0)

insert总是返回0,但是你在main中使用它的返回值意味着你希望它返回新插入的student的索引,即numberof_students

答案 1 :(得分:0)

每当你增加n_students ++时,你实际上正在使它的值为1。 因为在成功插入()之后,n_students从这个函数返回值,在你的情况下是0(返回0),所以你到目前为止增加的任何值都会回到零。

要获得您想要的外出,只需进行以下更改

insert(students, n_students, IDnum, studentName_tmp);

现在你没有在n_students中收集价值,所以n_students每次都会增加(不介于零之间)。