【问题标题】:C++ assigning value to array if element is equal to X [duplicate]如果元素等于X,C ++为数组赋值
【发布时间】:2019-12-11 21:20:47
【问题描述】:

我是 C++ 新手,我一直在尝试制作一个简单的游戏。我想要一个玩家可以对敌人应用状态效果的系统,所以我制作了一个可以容纳 5 个元素的字符串数组,比如“燃烧”或“中毒”等。然而,当我测试这个时,它似乎总是适用状态效果(在这种情况下,燃烧)到第一个和第二个状态“槽”。我希望它只适用于我的第一个空槽。我把这部分代码拿出来,从for循环扩展为if语句,这次我输出了statusEffect的值,它给了我0x1000020f0。我什至不知道那是什么。

这是我的代码,如果有帮助,我正在开发 Xcode。

int statusEffectDuration[5] = {0, 0, 0, 0, 0};
string statusEffect[5] = {"NONE", "NONE", "NONE", "NONE", "NONE"};

// Function for applying status effects
void applyStatusEffect(string appliedEffect, int statusDuration) {

    if (statusEffect[0] == "NONE") { // If first status effect is nothing then changes first status to "EFFECT"
        statusEffect[0] = appliedEffect;
        statusEffectDuration[0] = statusDuration;
    }
    else if (statusEffect[1] == "NONE") { // Same as first, but if second status is nothing then changes second status to "EFFECT"
        statusEffect[1] = appliedEffect;
        statusEffectDuration[1] = statusDuration;
    }
    else if (statusEffect[2] == "NONE") { // Third
        statusEffect[2] = appliedEffect;
        statusEffectDuration[2] = statusDuration;
    }
    else if (statusEffect[3] == "NONE") { // Fourth
        statusEffect[3] = appliedEffect;
        statusEffectDuration[3] = statusDuration;
    }
    else if (statusEffect[4] == "NONE") { // Fifth
        statusEffect[4] = appliedEffect;
        statusEffectDuration[4] = statusDuration;
    }
    else if (statusEffect[5] == "NONE") { // Sixth
        statusEffect[5] = appliedEffect;
        statusEffectDuration[5] = statusDuration;
    }
}

int main() {

    applyStatusEffect("EFFECT", 5); // "EFFECT" is the effect that is given, 5 is duration of effect

    // Displays status effect and effect duration
    cout << statusEffect; // Displays 0x1000020f0
    cout << "\n";
    cout << statusEffectDuration; // Displays 0x1000020f0

    return 0;
}

编辑:我很笨。我正在打印地址。但是将值赋予前两个空格而不是一个的问题是我发布此内容的最初原因。

【问题讨论】:

  • // Sixth 数组中只有 5 个元素。
  • 我建议你不要使用原始数组。如果您了解了 std::vector 和/或 std::array 以及如何使用它,您将不会对原始数组的不直观行为感到惊讶。
  • 我知道只有 5 个元素,但是我已经在解决另一个问题时懒得更改它:P 问题是它将状态效果应用于第一个和第二个“槽” ",当我只希望它适用于第一个时。
  • @Charlesistaken 尝试在其边界之外使用数组会导致undefined behavior。这意味着您的整个程序可能会开始做任何事情。你失去了任何保证它会做任何明智的事情。永远不要对这样的事情偷懒。你也不应该同时问两个问题。
  • Welp,对不起。懒惰的事情和问两个问题的部分。不过感谢您的帮助!

标签: c++


【解决方案1】:

您是在告诉计算机打印数组的地址。
要打印数组的内容,您需要使用循环:

for (i = 0; i < 5; ++i)
{
  cout << statusEffect[i] << "\n";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多