2014-12-10 2 views
-1

고전적인 "추측 번호"프로그램을 작성하고 있습니다.일치하는 문자열을 검사하는 OR 조건이 항상 true를 반환하는 이유는 무엇입니까?

"성공"이라고 쓰고 기본 경로로 이동 한 후에도 while 루프가 작동을 멈추지 않는 이유를 모르겠습니다. 당신이 또는 "성공", "성공"인 경우 체크하기 때문에

int xRan; 

void rdm(int to, int from){ 
    srand(time(NULL)); 
    xRan = rand()%to+from; 
} 

void iGuess(){ 
    string b; 
    int tries = 1; 

    cout << "Think of a number between 1 and 100" << endl; 
    rdm(100, 1); 

    while(b != "Success" || b != "success"){ 

     cout << "is your number higher or lower than " << xRan << ". (attempt #" << tries << ")" << endl; 
     cout << "If I guessed your number, please type 'Success' " << endl; 
     cout << "-->"; 
     cin >> b; 

     if(b == "Lower" || b == "lower"){ 
      rdm(xRan, 1); 
      tries++; 

     }else if(b == "Higher" || b == "higher"){ 
      rdm(100, xRan); 
      tries++; 

     }else{ 

     cout << "This is not a valid choice." << endl; 

     } 

    } 
    cout << "I'm so good! I did it in " << tries << "attempts!" << endl; 
} 
+0

Zeptile으로 작성하십시오. 두 번째 질문을 제거했습니다. "둘째, 숫자를 찾기 위해 더 나은 인공 지능 작성에 대한 조언을하고 싶습니다." 귀하의 게시물에서 그것은 일반적으로 하나의 2 질문을하는 것이 좋습니다. 변경 사항을 취소하고 직접 질문을 개선하십시오. 새로운 질문으로 두 번째 질문을 할 수는 있지만, 같은 글을 쓰는 유일한 사람이 아닌 것처럼 비슷한 게시물을 검색하십시오. –

답변

4

당신은 루프 당신을 떠나지 않을. 어느 것이 든 사실 일 수 있고 루프로 들어갈 수 있습니다. 따라서 대문자로 입력했는지 여부와 상관없이 그 중 하나는 사실 일 것입니다. 대신에

while(b != "Success" && b != "success") 
+0

이 제안은 즉각적인 문제와 그에 대한 적절한 대답을 수정하지만, 코드에서 대/소문자를 구분하지 않고 대신 http://stackoverflow.com/questions/11635/case-insensitive-string-comparison의 제안 사항을 따르십시오. ~에 - c –

관련 문제