【问题标题】:c++ variable keeps resetting instead of incrementing? [closed]c ++变量不断重置而不是递增? [关闭]
【发布时间】:2014-02-28 01:09:01
【问题描述】:
void RetailerOrder::addItem(Product* p)
{
    bool space = false;
    int counter = 0;
    while ((space == false) && (counter < manifest.size()))
    {
        if (manifest[counter] == nullptr);
        {
            manifest[counter] = p;
            space = true;
        }
        counter++;
    }

    if (space == false)
    {
        cout << "no space" << endl;
    }
}

为什么每次通过 while 循环时计数器都会重置为零?如果我按原样使用它,只有我输入的最后一个产品会存储在数组中,因为i 始终为 1。有没有办法让计数器增加。

【问题讨论】:

  • if(manifest[counter == nullptr); 末尾的分号可能与此有关。
  • 谢谢!这太简单了,我觉得自己很愚蠢,哈哈
  • 这就是为什么你应该使用 space = true; 而不是 goto fail; :-)

标签: c++ arrays counter


【解决方案1】:
if (manifest[counter] == nullptr);  // << see here
{
    manifest[counter] = p;
    space = true;
}

if 语句末尾的分号表示“如果条件,则不执行任何操作”。

然后是执行 always.

的大括号范围

应该是:

if (manifest[counter] == nullptr)
{
    manifest[counter] = p;
    space = true;
}

顺便说一句,我不喜欢这样的事情:

if (space == false) ...

因为,如果您智能地命名布尔值,您可以避免比较:

if (! foundSpace) ...

智能命名意味着布尔变量本身应该是可读的,例如foundSpacehaveFinisheduserIsClinicallyInsane。一旦是,您根本不需要将它与布尔常量进行比较。

这大大减少了代码大小并避免了您不知道何时停止将布尔值与常量进行比较的减少荒谬的情况:

if ((((haveFinished == true) == true) != false) == true) ...

除了之外,我在查看代码时非常重视我的垂直空间,并且有一些方法可以简化您的代码,使其更短,并且在我看来,更容易理解。

由于您仅使用 space 作为插入项目并过早退出循环的一种方式,因此您可以使用以下内容:

void RetailerOrder::addItem (Product* p) {
    // Check every possible slot.

    for (int i = 0; i < manifest.size(); i++) {
        // If one free, use it and exit.

        if (manifest[i] == nullptr) {
            manifest[i] = p;
            return;
        }
    }

    // None were free, complain bitterly.

    cout << "no space" << endl;
}

不过,这是我的一种风格方法,如果您不同意,请随意忽略它。

“多个返回点不好”的人群可能不喜欢它,但这通常是因为他们不理解它被认为是可疑的原因为什么,无法轻松查看许多代码路径。有了这个大小的函数,这不是一个真正的问题。

【讨论】:

  • 我喜欢这个,谢谢。我是 C++ 新手,所以我还没有开发出简洁的风格,但我一定会尝试,因为它更容易阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
相关资源
最近更新 更多