如何在C中填充二维结构数组?

时间:2015-12-04 06:31:51

标签: c arrays struct

在我的计划中,我创建了一个名为struct的{​​{1}},它有两个student字段intID。如果我制作一个包含20名学生的2D数组,我如何使用循环来遍历数组并为每个学生分配其值?对于这个值,数值是按数字顺序,1-20和30-50,所以我认为使用for循环应该使它变得容易,但我不能让它工作。我基本上需要它在完成时返回指向数组的指针。

classNum

3 个答案:

答案 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数组。如果它有正当理由,那么它可能有意义,但根据我在你的问题中看到的内容,你可以更好地使用一维阵列。如果您有任何问题,请告诉我。