C ++继续声明混乱

时间:2014-01-21 03:16:49

标签: c++ loops continue

背景

我正在阅读一本旧的C ++入门书,我已经躺在床下几年了。在阅读特定章节时,我碰巧遇到了“继续”声明。我阅读了书中关于它的信息;然而,这本书有点细节。我很好奇,想要测试一下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循环,因为它们都是迭代。我只需要解释为什么会这样。提前感谢大家。

1 个答案:

答案 0 :(得分:8)

如你所说,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,