【问题标题】:C - Check If All Values of Struct Array Return Same ValuesC - 检查结构数组的所有值是否返回相同的值
【发布时间】:2018-03-24 19:23:33
【问题描述】:

我想检查结构数组的所有值是否都保持相同的值,以便在结构数组中隐藏“已删除”条目。

我的结构是这样的:

struct spawnedObject {
    Hash objHash;
    Object obj;
    char* displayname;

    int invisibility;
    Vector3 position;

    int deleted; // 1=deleted and hidden, 0=should be listed and available
};

我想检查结构中所有条目的deleted 是否为真。当它们都为真时,让else 显示空文本。

我尝试循环所有deleted 值并在将值设置为1 时增加一个int,如下所示:

void objectManagerMenu() {
    objectVar = 0;
    int inc = 0; //store deleted entries count

    // loop through all entries. if entry deleted, increase.
    for (int i = 0; i < objectCount; i++) {
        if(spawnedObjects[i].deleted) inc++;
    }

    // check if there either are no entries, or if theyre hidden. if all stored entries are hidden, fallback to else. this is where it goes wrong.
    // problem: does not seem to fallback to else.
    if(objectCount != 0 || objectCount != inc) {
        for (int i = 0; i < objectCount; i++) {
            if(!spawnedObjects[i].deleted) { // remove hidden items from list
                char buffer[150];
                sprintf(buffer, "[ %i ] %s", i, spawnedObjects[i].displayname);

                menu.option(buffer).call(objectItemVar, i).submenu(objectItemMenu);
            }
        }
    } else {
        menu.option("Empty");
    }
}

似乎不起作用,因为没有显示任何内容。

有没有人建议我如何以更聪明的方式做到这一点?

【问题讨论】:

  • 有人有想法吗?
  • 请耐心等待,因为像我这样的人刚刚开始阅读
  • 真的很难理解你到底想用给出的代码和你的几句话做什么。注释您的代码以解释一些变量,例如 menu 或 inc。也是||在 if 语句中你真的想做什么?根据我的猜测,您可能想使用 && 而不是 ||
  • @RIJIK 对不起。该方法基本上是“删除”menu 中的条目。删除条目后,结构中的deleted 将设置为1,并且该条目将从列表中隐藏。工作正常,但是当所有内容都“删除”时(在deleted 中将所有条目设置为1),它什么也不显示。我想在数组结构中有条目但在deleted 中设置为1 时显示“空”文本。希望我解释得很好。
  • 已将 cmets 添加到我的代码中。

标签: c struct


【解决方案1】:

问题是你的||在 if 语句中,如评论中所述。

objectCount != 0

最有可能返回 true

objectCount != inc

返回 false,因为菜单是空的(在您正在尝试测试的当前场景中)
这样if 语句将始终为真(如果您的对象计数大于0),因此永远不会执行else。 将 || 更改为 &amp;&amp;

为什么
|| 如果至少有一个语句为真,则返回真。
&& 只有在两者都为真时才返回真并且这就是你想要的

【讨论】:

  • 啊,这似乎解决了它。奇怪,我以为我也试过了。我想不是,谢谢!
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 2014-08-11
  • 2014-05-15
  • 2021-10-01
  • 1970-01-01
  • 2022-12-20
相关资源
最近更新 更多