2011-05-23 106 views
5

想知道某個continue聲明所做的do...while(false)循環,我嘲笑了一個簡單的測試案例(僞代碼):continue語句

count = 0; 
do { 
    output(count); 
    count++; 
    if (count < 10) 
     continue; 
}while (false); 

output('out of loop'); 

的產量,出乎我的意料:

0 
out of loop 

for (count = 0; count == 0; count++) { 
    output(count); 
    if (count < 10) 
     continue; 
} 
output('out of loop'); 

有點混亂,我從do...whilefor改變了環

雖然功能不盡相同,目的是幾乎相同的:做一個條件既滿足了第一次迭代,並在接下來的人繼續他們可能無法運行(直至達到一定值時,純粹是爲了阻止可能的無限循環。)次數相同,但這裏的功能並不重要。

輸出是和以前一樣:

0 
out of loop 

現在,放入一個簡單的while循環方面:

count = 0; 
while (count == 0) { 
    output(count); 
    count++; 
    if (count < 10) 
     continue; 
} 
output('out of loop'); 

再次,相同的輸出。

這是一個有點混亂,因爲我一直認爲continue聲明爲「跳轉到下一個迭代」。所以,在這裏我會問:在這些循環中,每個語句都會做什麼continue?它只是跳到這種狀況?

((對於它的價值,我測試JavaScript中的上面,但我相信這是與語言無關... JS必須得到至少是右))

+0

@Brad&@Neil:尼爾是正確的re:我的混亂。我在腳下開槍自殺。 – abcd 2011-05-23 17:45:30

回答

5

在for循環中,繼續運行for語句的第三個表達式(通常用作某種迭代),然後是條件(第二個表達式),然後是條件爲true的循環。它不會運行循環當前迭代的其餘部分。

在一段時間(或做-while)中循環,它只是運行的條件,然後如果該條件成立的循環。它也不會運行循環當前迭代的其餘部分。

1

continue陳述的定義爲「跳轉到下一個迭代」是正確的。這將迫使程序開始下一次迭代首先重新評估條件表達式

您的代碼片段的問題是,它們都在一次迭代後全部退出,因爲您的條件表達式設置爲falsecount ==0。這將一次迭代後總是返回false。

此外,將繼續語句在循環的結束是沒有意義的。無論哪種情況,它都會重新評估條件表達式。

0

continue跳到下一迭代時,它在一個循環中被使用。 break退出當前塊。通常,break用於退出循環,但可用於退出任何塊。

for (int i = 0; i < 1000; i++) { 
    if (some_condition) { 
    continue; // would skip to the next iteration 
    } 

    if (some_other_condition) { 
    break; // Exits the loop (block) 
    } 

    // other work 
} 
1

最好把continue想象成跳轉到封閉循環的末尾。這可以haelp:

#include <iostream> 
using namespace std; 

int main() { 

    int n = 0; 

    do { 
     cout << n << endl; 
     n += 1; 
     if (n == 3) { 
      continue; 
     } 
     cout << "n was not 3" << endl; 
    } while(n != 3); 

} 

它打印:

0 
n was not 3 
1 
n was not 3 
2 

並終止,因爲繼續跳躍到在循環結束時,同時()。 ()和while()循環發生類似的僵硬。

相關問題