2013-12-22 61 views
7

我想知道,而不是使用do-while循環,什麼是等效的for循環或c中的任何其他組合循環?等效使用for-loop代替do-while循環

+0

你覺得呢? do-while(vs直接'while')的主要問題是循環總是迭代至少一次。 –

回答

8

任何類型的循環都可以由無限「永久」循環和條件語句break的組合構造而成。

例如,

do { 
    <action> 
} while (<condition>); 

轉換爲for循環,你可以這樣做:

for (;;) { 
    <action> 
    if (!<condition>) break; 
} 

您可以使用同樣的伎倆到do/while循環轉換爲while循環,像這樣:

while (true) { 
    <action> 
    if (!<condition>) break; 
} 

此外,根本不需要循環:上面的任何一個都可以使用頂部的標籤和底部的goto進行建模;這是在彙編語言中進行循環的常用方式。首先將三種循環結構引入語言的唯一原因是爲了使語言更具表達性:循環比上述任何替代方案都更能使作者的想法更加完善。

+0

所以if(!)break;會和做零件一樣嗎? – deathshot

+0

@deathshot是的,「突破」條件是否定的「延續」條件。 – dasblinkenlight

2

沒有其他循環至少執行一次循環內容,就像做一樣。當然你可以模仿做,一邊用標誌和while循環:

do { 
    A; 
} while (B) 

成爲

int flag=1; 
while (flag || B) { 
    flag=0; 
    A; 
} 

但是這不是一個真正的替代方案,它只是掩蓋了你的原意。

3

以下三個環都是等價的:

#define FALSE (0) 
#define TRUE (!(FALSE)) 

do 
{ 
    status = getStatus(); 
} 
while(status == TRUE); 

status = TRUE; 
while(status == TRUE) 
{ 
    status = getStatus(); 
} 

for(status = TRUE; status == TRUE; status = getStatus()) 
{ 
} 
+0

'status == true'? –

+0

@OliCharlesworth謝謝。 –

+0

噢,我真的暗示那會被慣用地寫成'status',而不是'status == true'。 –