2013-10-14 61 views
0
do{ 
    cout << "your number"; cin >> z; 


    if (z > 4){ 
    cout << "invalid answer" << endl;} 
    else if (z == 4){ 
    cout << " no" << endl;} 
    else { 
    cout <<"great!" << endl; } 
} while (z != 3, 2, 1); 
} 

在我的看法是:調出「你的號碼」,直到z是3或2或1?怎麼了?'爲什麼有無限循環?C++

+4

'(z!= 3,2,1)'正在使用逗號運算符。它評估左手錶達式並丟棄結果,然後評估右手錶達式並返回結果。所以你的循環條件等同於'while(1)'; – jrok

+0

查找逗號運算符和運算符優先級。你的'while'條件不符合你的想法。 – juanchopanza

+1

另一位候選人未能通讀本教程,直到逗號運算符... – 2013-10-14 15:11:56

回答

5
while (z != 3, 2, 1); 

你而條件是錯誤的,它應該是:

while (z != 3 && z != 2 && z != 1); 

如果使用逗號,它會評估(計算),全部由他們分開的表達,並且將使用最後一個表達式。 !

在這種情況下

(z != 3, 2, 1) 

它將評估Z = 3,則2,最後將使用1,你雖然是這樣的:

while(1); 

這是一個無限循環。

0

問題可能會發生在同時條件。您的表達式"z != 3, 2, 1"的返回值將評估爲「1」,這意味着在C++中爲true。所以會有一個無限循環。嘗試重寫cond。進出口。如"z != 3 || z != 2 || z != 1"