2014-01-21 98 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,