【问题标题】:C++ Continue Statement ConfusionC++ Continue 语句混淆
【发布时间】:2014-01-21 03:16:49
【问题描述】:

背景

我正在阅读一本旧的 C++ 入门读物,我已经在床底下躺了几年了。在阅读特定章节时,我碰巧遇到了“continue”语句。我阅读了书中有关它的信息;然而,这本书的细节有点短。出于好奇,我想测试 continue 语句,看看我是否可以自己了解更多信息(虽然它现在可能已经过时,但我仍然很好奇它是如何工作的)。

问题

我读到 continue 语句“导致程序在当前迭代中跳过循环的其余部分,就好像已经到达语句块的末尾,导致它跳转到下一个迭代的开头 -- (cplusplus.com)"

话虽如此,我构建了这个简单的程序来测试它:

#include <iostream>

int main(void) {

unsigned short int amount = 100;

unsigned short int container[5] = {amount , 0, 0, 0, 0,};

while(!(container[0]==90))
{
    if(container[0]==97) continue;
    std::cout << --container[0] << ", ";
}

return 0;
} 

这个程序的输出是:

99, 98, 97,

现在,我认为结果会是这样的:

99, 98 , 96 , 95, 94, 93, 92, 91, 90

我认为结果会是这样,因为根据定义,continue 语句会跳过 97 并重新开始迭代,从而输出上述结果中的一系列数字。

书中的例子可以工作,但它是用 for 循环 执行的。我很好奇为什么它不适用于 while 循环,因为它们都是迭代。我只需要一些解释为什么会这样。提前感谢大家。

【问题讨论】:

  • 顺便说一句,您应该使用a!=b 而不是!(a==b)
  • @BryanChen 他们是等价的。
  • @ZacHowland 我知道,但这令人困惑。如果你忘记了括号,你将很难找到错误
  • @BryanChen 你的意思是!a == b?如果您不小心输入了a != !b,则该错误不会更难找到。

标签: c++ loops continue


【解决方案1】:

正如你所说,continue 跳过了循环体的其余部分。在这种情况下,它包括--container[0],因此它的值永远不会再改变。

如果您要使用 for 循环,更新其迭代器子句中的计数器,那么它的行为将如您所愿:将跳过主体的其余部分,但不跳过迭代器。

for (container[0] = 99; container[0] != 90; --container[0]) {
    if (container[0] == 97) continue; // skip "cout", jump to "--"
    std::cout << container[0] << ", ";
}

// Output: 99, 98, 96, 95, 94, 93, 92, 91,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多