在我的计划中,我创建了一个名为struct
的{{1}},它有两个student
字段int
和ID
。如果我制作一个包含20名学生的2D数组,我如何使用循环来遍历数组并为每个学生分配其值?对于这个值,数值是按数字顺序,1-20和30-50,所以我认为使用for循环应该使它变得容易,但我不能让它工作。我基本上需要它在完成时返回指向数组的指针。
classNum
答案 0 :(得分:3)
你需要有2个循环而不是1,如下所示,
for(i = 0; i <4; i++)
{
for(j = 0; j <5; j++)
{
classroom[i][j].ID = (i+1) * (j+1);
classroom[i][j].classNum = classNumba;
classNumba++;
}
}
此外,由于classroom
是全局的,因此您无需退回。
答案 1 :(得分:1)
正如我从你的问题中看到的,你不知道如何初始化2-D结构数组。所以你应该参考this。要填充2D数组,您总是需要2个循环,所以请记住这一点。
int i=1, classNumba=30;
for(x=0; x<4; x++) {
for(y = 0; y <5; y++) {
classroom[x][y].ID = i;
classroom[x][y].classNum = classNumba;
classNumba++;
i++;
}
}
循环将执行((x = 4)*(y = 5)= 20)表示20次。 20次i
将被分配到教室[x] [y] .ID,并且每次将从其初始值i=1
增加+1。类似地,classNumba将被分配到教室[x] [y] .classNum,并且每次它将从其初始值classNumba=30
增加+1
答案 2 :(得分:0)
你的代码存在许多微妙的问题,首先是 - 为什么在一个简单的数组更有意义的时候,你想要一个2D结构数组?无论如何,您可以自由使用2D数组,但就问题陈述而言 - 绝对没有必要这样做。
使用简单的1D数组可以大大简化代码,以及在函数之间传递参数。尝试进行以下比较:
#include <stdio.h>
typedef struct student {
int ID;
int classNum;
} student;
#define NSTUD 20
student *makeClass (student *classroom);
int main (void) {
student classroom [NSTUD] = {{0}, {0}}; /* array of 20 students */
size_t i = 0;
makeClass (classroom);
printf ("\nclassroom information:\n\n");
for (i = 0; i < NSTUD; i++)
printf (" ID : %2d classNum : %2d\n",
classroom[i].ID, classroom[i].classNum);
return 0;
}
/* function that will return the array */
student *makeClass (student *classroom)
{
if (!classroom) return NULL; /* validate classroom address */
int classNumba = 30;
int x = 0;
for(x = 0; x < NSTUD; x++)
{
classroom[x].ID = x + 1;
classroom[x].classNum = classNumba;
classNumba++;
}
return classroom;
}
编译(已启用警告)
gcc -Wall -Wextra -O3 -o bin/classroom classroom.c
使用/输出强>
$ ./bin/classroom
classroom information:
ID : 1 classNum : 30
ID : 2 classNum : 31
ID : 3 classNum : 32
ID : 4 classNum : 33
ID : 5 classNum : 34
ID : 6 classNum : 35
ID : 7 classNum : 36
ID : 8 classNum : 37
ID : 9 classNum : 38
ID : 10 classNum : 39
ID : 11 classNum : 40
ID : 12 classNum : 41
ID : 13 classNum : 42
ID : 14 classNum : 43
ID : 15 classNum : 44
ID : 16 classNum : 45
ID : 17 classNum : 46
ID : 18 classNum : 47
ID : 19 classNum : 48
ID : 20 classNum : 49
就像我说的,你可以自由使用2D数组。如果它有正当理由,那么它可能有意义,但根据我在你的问题中看到的内容,你可以更好地使用一维阵列。如果您有任何问题,请告诉我。