为什么我一直在丢失结构成员的值?

时间:2017-12-04 15:29:22

标签: c if-statement struct

如果这是我犯过的一些愚蠢的错误,我很抱歉,我只是一个菜鸟。

首先,我创建了一个结构;

struct StarsStruct
{
    int SerialNumber;
    char StarName[10];
    double x;
    double y;
};

然后,我使用了创建了一个struct指针数组; (NumberOfStars只是一个int变量)在任何if语句之前,它在程序的顶部被声明和初始化。

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

我已经完成了一个for循环来改变我的struct数组中成员的值;

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声明时,由于某种原因,这些值被完全删除;

完整部分代码;

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

        //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, '.');
        }

    }


    else if (strcmp(CurrentCommand, "list") == 0)
    {
        Stars[0].SerialNumber;
        Stars[1].y;
        Stars[2].SerialNumber;
        Stars[3].SerialNumber;
        Stars[4].x;
        Stars[5].y;
        for (int i = 0; i < NumberOfStars; i++)
        {

            printf("%d", Stars[0].SerialNumber);

        }
    }

FIRST IF STATEMENT

SECOND IF STATEMENT

1 个答案:

答案 0 :(得分:2)

注意: malloc()会返回未经过内存的内存。引用C11,章节§7.22.3.4

  

malloc函数为大小和大小指定的对象分配空间   其价值是不确定的。

else if部分(当你到达那里时),你没有初始化成员,因为你没有进入负责分配值的if块!

再次,C11,章节§6.8.4.1,

  

在两种形式中,如果表达式比较不等于0,则执行第一个子语句。在else形式中,如果表达式比较等于0,则执行第二个子语句。[...]

如果您希望if块中的值“可用”,则需要将分配部分移到else条件之外。