我正在制作一个程序,使用结构将学生成绩放入数组中作为期末练习。我需要创建一个函数来检查数组中是否还有任何位置,如果没有,则数组的大小需要加倍,然后需要将成绩添加到下一个可用位置。如果数组有空缺职位,则应将等级值添加到下一个可用职位。每当数组发生更改时,grades_array_pos 和grades_array_size 都必须使用正确的值进行更新。我对 C 还很陌生,我很难理解如何做到这一点。所有这些都必须仅使用基本变量、for 和 while 循环,并以非常基本的方式完成。
struct student_grades
{
int student_id;
int *grades_array[10];
int grades_array_pos;
int grades_array_size;
};
void add_grade(struct student_grades * student, int assignment_grade){
}
这是每个人都需要掌握的关键但简单的技能。基本方法是保持变量保存当前分配的元素数量和使用数量的计数器。然后循环填充你的数组。在开始你的循环,检查是否if (used == allocated)
以确定是否需要重新分配。
如果需要重新分配,则使用 TEMPORARY 指针,调用realloc
并将分配的元素数量加倍。验证一下realloc
成功,否则,中断填充数组的循环(不要退出程序),因为指向数组的原始指针仍然指向之前的有效数据realloc
试图。
If the realloc
成功将新大小的内存块分配给原始指针,使用新的已分配元素计数更新变量 - 并继续,根据需要重复。例子:
#define NSTRUCT 8 /* initial number of struct to allocate for array */
...
size_t allocated = NSTRUCT, /* holds current number of elements allocated */
used = 0; /* holds current number used/filled */
struct student_grades *grades = malloc (allocated * sizeof *grades);
if (!grades) {
perror ("malloc-grades");
return 1;
}
while (/* loop to fill struct array */) {
if (used == allocated) { /* check if realloc needed */
/* always realloc using a TEMPORARY pointer */
void *tmp = realloc (grades, 2 * allocated * sizeof *grades);
if (!tmp) { /* validate reallocation */
perror ("realloc-grades");
break; /* don't exit, original pointer still good */
}
grades = tmp; /* assign reallocated block to grades */
allocated *= 2; /* update allocated size */
}
/* fill next element -- keep going.... */
used++;
}
仔细检查一下,如果您仍有疑问,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)