Count没有返回正确的值

kpbwa7wx  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(99)

我定义了一个结构体(bldg),它有一个变量(int classroom[5][40]),我的函数计算剩余的可用座位(40)没有返回正确的值。

#define MAX_ROOMS 5 
#define MAX_OCCUPANTS 40 

typedef struct bldg{
    int classroom[MAX_ROOMS][MAX_OCCUPANTS];
    int seminarRoom[MAX_ROOMS][MAX_OCCUPANTS];
    int auditorium[MAX_ROOMS][MAX_OCCUPANTS];
    int trainingRoom[MAX_ROOMS][MAX_OCCUPANTS];
} bldg;

void displayAvailableRooms(const bldg *ag)
{
    printf("Available Seats in Classrooms:\n");
    for (int i = 0; i < MAX_ROOMS; i++)
    {
        int availableSeats = 0;
        for (int j = 0; j < MAX_OCCUPANTS; j++)
        {
            if (ag->classroom[i][j] == 0)
            {
                availableSeats++;
            }
        }
        printf("Classroom %d: %d seats available\n", i + 1, availableSeats);
    }
}

int main()
{
    bldg A;
    displayAvailableRooms(&A);
    return 0; 
}

字符串
产出

Available Seats in Classrooms:
Classroom 1: 17 seats available
Classroom 2: 13 seats available
classroom 3: 21 seats available
Classroom 4: 19 seats available
classroom 5: 17 seats available


它应该是40为所有的房间,因为他们都是空的,但我一直得到这些输出。我需要帮助

xoefb8l8

xoefb8l81#

数组中的值未初始化,因此是不确定的,因此availableSeats的值也是不确定的。如果它是一个有符号的int,你甚至可能会得到溢出行为。
如果您希望将这些值设置为0,则必须显式地执行此操作。

int main()
{
    bldg A;

    for (int i = 0; i < MAX_ROOMS; i++)
        for (int j = 0; j < MAX_OCCUPANTS; j++) 
            A->classroom[i][j] = 0;

    displayAvailableRooms(&A);
    return 0; 
}

字符串
您可能希望将其分解为一个单独的函数。

p8h8hvxi

p8h8hvxi2#

或者初始化数组within loops,你也可以提供初始化器:

bldg A =
{
        .classroom    = { { 0 } },
        .seminarRoom  = { { 0 } },
        .auditorium   = { { 0 } },
        .trainingRoom = { [2] = { [7] = 1 } },
};

字符串
请注意,初始化数组的一个元素就足够了,它也可以在中间的某个地方(只是为了说明,我在训练室这样做了,一个训练室中的一个座位将被占用......)-所有未明确指定的数组元素将被初始化为0。

相关问题