如何在不同的if语句中访问我的struct元素?

时间:2017-12-04 13:50:14

标签: c arrays struct initialization declaration

如果这是一个非常愚蠢的问题,请道歉。

我在这里声明并初始化了一个struct数组(就在for循环之上);

printf("\n>>>");
    scanf( "%s" , &CurrentCommand);

    if (strcmp(CurrentCommand, "bang") == 0)
    {
        Clear();
        printf("Enter the number of stars to be created: ");
        scanf("%d", &NumberOfStars);

        struct StarsStruct *Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars);

        for (int i = 0; i < NumberOfStars; i++)
        {
            r1 = rand() % (60 + 1 - 0) + 0;
            r2 = rand() % (30 + 1 - 0) + 0;

            Stars[i].SerialNumber = i;
            Stars[i].x = r1;
            Stars[i].y = r2;

            Plot(r1, r2, '.');
        }

    }

我已经在第一个IF语句中访问了for循环中所需的元素,但是我无法再在第二个IF循环中访问它们,可能是因为“struct StarsStruct * Stars”是在本地声明的。

那么我怎样才能在另一个if语句中访问它?在开始时声明它不起作用,因为我想用malloc创建数组必须一次完成,声明和初始化。

总而言之,我想访问Stars结构的成员,在我将创建的另一个IF语句中,Stars [1] .SerialNumber等。但是我目前不能。

1 个答案:

答案 0 :(得分:3)

您需要进一步定义变量,使其在需要的位置可见。您只需要将其初始化为NULL,然后您可以稍后将malloc的结果分配到您需要的位置。

// define up here and initialize to NULL
struct StarsStruct *Stars = NULL;

printf("\n>>>");
scanf( "%s" , &CurrentCommand);

if (strcmp(CurrentCommand, "bang") == 0)
{
    Clear();
    printf("Enter the number of stars to be created: ");
    scanf("%d", &NumberOfStars);

    // assign here
    Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars);

    for (int i = 0; i < NumberOfStars; i++)
    {
        r1 = rand() % (60 + 1 - 0) + 0;
        r2 = rand() % (30 + 1 - 0) + 0;

        Stars[i].SerialNumber = i;
        Stars[i].x = r1;
        Stars[i].y = r2;

        Plot(r1, r2, '.');
    }

}