【问题标题】:C++ Assignment don't workC++ 赋值不起作用
【发布时间】:2013-05-23 13:37:39
【问题描述】:

抱歉这个看起来很简单的问题,但我不知道是什么原因造成的:

在 C++ 项目中,我有一个循环中的一个循环,并且必须保留内部两个,所以我有一个用于查询的变量。在第一次迭代中它工作正常,但在第二次从 dtime 到 abruch 的分配不起作用。在调试器中,dtime 正确地具有值“1”和缩写“0”,但这在分配之后仍然存在。两者都是 long 类型。

for (sect = 0; sect <= sections; sect++)
{
    abbruch = 0;
    for(line = 0; line < maxlines ; line ++)
    {
        abbruch = dtime[sect][0];
        if(abbruch != 0)
        {
            break;
        }
        for (index = 0; index < 30; index ++)
        {
            if (complicated query)
            {
                dtime[sect][0] = DiffTime[maxlines * sect + line];
                break;
            }
        }
    }
}

我使用 VS2012 Ultimate。 有没有人知道如何发生这种情况或如何解决?

【问题讨论】:

  • 如果你正在调试一个发布版本,这种明显的错误仅仅是调试器的错误。如果您想在断点或单步之后检查变量,请使用调试构建。

标签: c++ variable-assignment


【解决方案1】:

你是不是故意放这个的?

abbruch = dtime[sect][line];

(行而不是 0)

但芭丝芭所说的也是真的。一个 break 只会破坏一个 for 循环。

【讨论】:

  • 在这一步中,只需要获取每个部分的第一行。因为 break 语句只中断一个循环,所以我在 (abbruch != 0) 查询中有第二个循环。
【解决方案2】:

break 只会将您带出当前的for 循环。在您的情况下,abbruch != 0 时不会在 break 之后调用 index 上的循环,因为 break 将使您脱离 line 上的循环。另一个 break 语句将带您脱离 index 的循环。

这是基本原理,但到目前为止,最好的办法是使用调试器逐步完成。我不会以这种方式使用 break 语句,因为它太混乱了。考虑使用return 语句代替breaks 将三重循环结构分解为函数调用。

此外,在 for 循环中本地化交互变量也是一个好主意,例如

for (int sect = 0; sect <= sections; sect++)

【讨论】:

  • 是的,这是有意的。事实上,我只想在 dtime 在索引循环中获得值 != 0 时才中断,因此它应该在使用 if(abbruch != 0) 查询的行循环的下一次迭代中中断。
  • abbruch 的数据类型是什么?如果是浮点数,abbruch != 0 不好。
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多