2011-01-09 119 views
2

我們可以使用for循環和while循環來達到同樣的目的。 如果我使用而不是while,它們會以什麼方式影響我們的代碼? if-else和switch-case之間會出現同樣的問題?如何決定使用什麼?例如 哪一個你更喜歡?何時在while循環中使用for循環?

此代碼:

int main() 
{ 
    int n = 10; 

    for(int i=0;i<n;i++) 
    { 
     do_something(); 
    } 
    return 0; 
} 

或者驗證碼:

int main() 
{ 
    int n=10,i=0; 

    while(i<n) 
    { 
      do_something(); 
      i++; 
    } 
    return 0; 
} 

,如果使用或while循環沒有以任何方式影響的代碼,然後我可以知道什麼是需要做2解決同樣的問題?

+1

刪除了C標籤,因爲C中沒有'cin`。 – Puppy 2011-01-09 17:57:26

+0

http://stackoverflow.com/questions/2950931/for-vs-while-in-c-programming – Lucas 2011-01-09 18:01:49

+1

我稍微改變了標題, [c]在刪除`cin`後標記回來,因爲這個問題肯定跨越了整個C/C++程序員基礎。 – SiegeX 2011-01-09 18:04:50

回答

10

如果您知道循環應預先運行的迭代次數,我會推薦for構造。雖然循環對於當循環的終止條件發生在某些尚未確定的時間時有好處。

13

使用任何一個使你的代碼的意圖最清楚。

0

絕不會影響你的程序的工作方式!它更容易理解的問題。

switch(i)  // Once finding your case, you can easily know where the switch ends 
       // and thus the next statement of execution 
{ 
    case 1: break ; 
    case 2: break ; 
    // ..... 
    case 10: break ; 
    default:break ; 
} 

if(i==1) // Here you have the pain of finding where the last else if ends ! 
{} 
else if(i==2) 
{} 
// ... 
else if(i==10) 
{} 

然而,這是一個品味問題。我更喜歡switch

+0

if-else和switch case – Atul 2011-01-09 17:41:46

+0

@Atul每個人都認爲這是可讀性和易於理解的問題。 – Mahesh 2011-01-09 17:43:30

2

通常,for循環可能是優選的簡單的循環中,由於環路的邏輯被包含在一個單一的線路:

for (int i = 0; i < 10; ++i) {...}

然而,有時我們需要更復雜的邏輯或流量控制。 A while循環允許我們實現更復雜的循環。例如,假設我們只希望增加在一定條件下計數器變量:

int i = 0; 
while (i < 10) 
{ 
    if (some_condition) ++i; 
    else if (some_other_condition) { ... } 
    else break; 
} 
1

你不能寫while(int i=0, i < n);也就是說,您必須在while循環之前定義i;意味着i存在於內部以及循環外部。

但是,在for循環的情況下,您可以在for循環本身中定義i;所以i不存在於循環外部。這是一個區別。正因爲這個差異,我喜歡for超過while。很少用while,當for讓事情更煩瑣!

1

只需使用使代碼可讀和邏輯的代碼即可。

在某些情況下,編譯器(至少gcc)將能夠優化比for循環做得更好一點。如果我沒有記錯,優化只是幾個時鐘週期,所以它可能永遠不會對性能產生任何顯着影響。

1

有一些非常微妙的區別..

  • 循環變量(多個),例如範圍,與fori具有局部範圍,具有while這已到之前定義(這意味着它是可用的之後,當然也可以做到這一點與for以及..)
  • continue,具有for循環,變量將遞增/遞減,具有while,你必須之前continue

插入操作坦率地說,如果你需要如果你不知道邊界,並且沒有真正的遞增/遞減,則while循環更有意義,例如遞增/遞減,for循環是有意義的。

while(some_stream >> input) 
{ 
    // do stuff... 
} 
4

我試着更喜歡for循環。爲什麼?因爲當我看到一個for循環時,我可以預料所有循環bookeeping都保存在一個語句中。我可以插入breakcontinue語句,而不用擔心打斷循環的操作。最重要的是,循環的主體集中在你真正想要循環做什麼,而不是維護循環本身。如果我看到while,那麼在我能夠理解循環使用的迭代模式之前,我必須查看並理解整個循環體。

我最終使用while唯一的地方是對於其中的一些常規外的環路的控制那些少數情況下(即FindFirstFileW

這是個人意見的所有問題,但。很多人不喜歡我用for循環做的事情,因爲循環語句通常最終會跨越多行。