2013-10-14 3 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

쉼표 연산자를 사용할 때까지 자습서를 읽지 못한 또 다른 후보자 ... –

답변

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

귀하의 동안 조건이 잘못, 그것은해야한다 : 당신이 쉼표를 사용하는 경우

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

, 그것은 (계산) 그들에 의해 분리 된 모든 식을 평가하며, 마지막 표현을 사용합니다. !이 경우

(z != 3, 2, 1) 

그것은 = 3, 다음 2 Z를 평가하고 마지막으로 1을 사용합니다, 당신의 동안은 다음과 같이 보일 것이다 : 무한 루프입니다

while(1); 

합니다.

0

while 조건에 문제가 발생할 수 있습니다. 표현식 "z != 3, 2, 1"의 반환 값은 "1"로 평가되며 이는 C++에서 true를 의미합니다. 따라서 무한 루프가 발생합니다. cond를 다시 작성하십시오. exp. "z != 3 || z != 2 || z != 1"입니다.

관련 문제