【问题标题】:Why do I keep losing the values of my struct members?为什么我不断丢失我的结构成员的值?
【发布时间】:2017-12-04 15:29:22
【问题描述】:

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

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

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

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

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

我已经做了一个 for 循环来更改我的结构数组中成员的值;

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);

        }
    }

【问题讨论】:

  • 这不是第二个 if 语句,而是一个 else if 语句。你不能同时进入这两个部分。
  • 您需要在函数中显示更多上下文。目前还不清楚每个部分是如何被调用的以及你在用Stars做什么。
  • 除非您的问题是关于 IDE 本身,否则请不要发布您的 IDE 的屏幕截图。创建并发布minimal reproducible example(作为文本)。
  • 那么,当你进入你的“第二个 if 语句”时,你确定你之前已经执行了你的“第一个 if 语句”吗?整个事情是如何运作的?您的“代码的完整部分”根本没有使它更清晰。
  • @Erik W:显然,OP 知道。他们把它放在那里只是为了能够通过用鼠标瞄准它们来检查值。这没有任何意义,但仍然......

标签: c if-statement struct


【解决方案1】:

注意: malloc() 返回未初始化的内存。引用C11,第 7.22.3.4 章

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

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

再一次,C11,第 6.8.4.1 章,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2010-09-18
    • 2014-06-10
    • 2011-03-01
    相关资源
    最近更新 更多