2014-01-21 99 views
2

背景

我正在阅读一个旧的C++底层,我已经躺在床上几年。在阅读某一章时,碰巧遇到了“继续”声明。我读了书中有关它的信息;然而,这本书在细节方面略有欠缺。我好奇,想测试继续声明,看看我是否可以自己了解更多关于它的内容(虽然它现在可能已经过时了,但我仍然很好奇它是如何工作的)。C++继续声明混淆

问题

我读了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循环。我很好奇,为什么它不能与同时循环,因为它们都是迭代。我只是需要一些解释,为什么这是。感谢大家提前。

+0

顺便说一句,你应该使用'a!= b'而不是'!(a == b)' –

+1

@BryanChen它们是等价的。 –

+0

@ZacHowland我知道,但它很混乱。如果你忘记了括号,你将很难找到bug –

回答

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,