晚上好/上午/下午/下午,大家好。我目前对我的代码有点问题。我正在尝试创建一个名为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弗雷德,
答案 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每次都会增加(不介于零之间)。