2011-10-06 138 views
1

我無法理解爲什麼在此代碼段中打印出「Hello」語句不是 。我認爲for循環中的條件語句僅在第二次迭代後纔開始測試。循環C++的奇怪行爲

for (count = 0; count < 0; ++count) 
    { 
    cout<<"Hello!\n";  
    } 
+1

閱讀本文檔 - HTTP:// WWW .cplusplus.com/doc/tutorial/control/ – adatapost

+3

零很小,但不小於它自己。 – kenny

回答

7

它從來沒有進入循環,因爲for循環在開始時進行了測試。

您從count = 0開始,但循環條件爲count < 0。所以它立即失敗並跳過整個循環。

do-while循環是在迭代結束時進行測試的循環。

2

我認爲,在後只在第二次迭代

for循環開始變得 測試的條件語句不,它不需要。它已在第一次迭代之前進行檢查。

4

for循環:

for (count = 0; count < 0; ++count) 
{ 
    cout<<"Hello!\n";  
} 

被定義爲等同於:

{ 
    count = 0; 
    while (count < 0) 
    { 
     { 
      cout<<"Hello!\n"; 
     } 
     ++count; 
    } 
} 

需要提醒的是continue會去++count,而不是count < 0

+0

另外一組括號刪除了注意事項 –

+0

@Minging Duck:謝謝(修復)!任何對破碎版本感興趣的人都可以看看Matthieu M.的回答。 – Mankarse

2

首先測試條件。

一個for

for (<initializer>; <condition>; <increment>) { <body> } 

等同於:

{ 
    <initializer> 
    bool __first = true; 
    while ((__first ? __first = false : (<increment>, true)), <condition>) { 
    <body> 
    } 
} 

唯一的循環結構總是一次迭代是:

do { 
    <body> 
} while (<condition>); 
+1

你是否真的認爲那些爲'for'循環掙扎的人會被這種條件和逗號操作符的無故使用所幫助? – Mankarse

+0

@Mankarse:不是真的,但我想這會幫助他理解'for'提供的語法糖。用'if'後面加上'do/while'表示它可能會更容易。 –