2014-04-13 2 views
-1
#include <cstdlib> 
#include <ctime> 
#include <iostream> 

int main() 
{ 
    bool newgame; 

    std::cout << " Ready to waste more family money gambling? y/n "; 
    std::cin >> newgame; 
    if (newgame = "n") 
    {  
     newgame = false; 
     return(123); 
    } 
    else if (newgame = "y") 
    { 
     srand(time(NULL)); 
     int number = rand() % 10; 
     int guess; 
     std::cout << "Pick your number "; 
     std::cin >> guess; 
     if (guess == number) 
     { 
      std::cout << "Winner!"; 
     } 

     else 
     { 
      std::cout << "Loser!"; 
     } 
    } 
} 

내가 여기서 잘못한 것을 이해하지 못합니다. "y"또는 "n"을 입력하면 명령 프롬프트가 닫힙니다. 루프 유형을 변경하는 것부터 코드를 재정렬하는 것까지 모든 것을 시도했지만 시도한 모든 것은 효과가 없습니다.이 C++ 코드에서 내가 뭘 잘못하고 있니?

+2

을 비교 한을 수행 newgame을 잘못 비교합니다. 우선, 항등 연산자 ('==')가 아닌 대입 연산자 ('=')를 사용하고 있습니다. 또 다른 한가지는 부울을 문자열과 비교하는 것이고 이것은별로 의미가 없습니다. –

+0

항상 경고를 사용하여 컴파일하십시오. 경고를 받으면 *주의를 기울이십시오. – jwodder

+0

세기의 버그의 또 다른 사례 ... – 101010

답변

3

문제는 ==는 할당을위한 것이 아니라 같음의 연산자입니다. 무슨 일이 일어나고 것은 여기이 부분,

if (newgame = "n") 

{  newgame = false; 
     return(123); 
} 

가 실행하고 저장하지 않는 123 부울로 종료되어 있다는 것입니다 "예"와 "아니오"값, 그들은 거짓을 위해 진정한 1을 저장하지 않고, 0.

+0

포인터에서 'bool'로의 암시 적 변환이 있습니다. 결과는 포인터가 널 포인터 인 경우에는'false'이고, 그렇지 않으면'true'입니다. ''n ''은'std :: string'이 아니며 포인터로 쇠퇴하는'char const' 배열입니다. –

+0

아, 나는 그 변환이 존재한다는 것을 몰랐다. 그에 따라 내 대답을 조정할 것입니다. – user3476738

3

a bool은 값 0 또는 1 (true 또는 false) 만 보유 할 수 있습니다. newgamechar으로 변경해보세요. 또한 평등 대신() 할당을 사용하고 있습니다 (==).

루프하려는 경우 (귀하의 질문에 포함 된 것 같아요) do...while 루프에 변수 선언 외부의 모든 것을 래핑하려고 할 것입니다.

+0

감사합니다. 나는 두 가지 대답을 받아 들일 수 있기를 바랍니다. 당신의 대답이 저를 아주 잘 도왔 기 때문입니다. do ... while 회 돌이가 문제의 해답이었고 지금해야 할 일은 눈에 보이는 단어를 형식화하여 모두 한 줄에 표시하지 않는 것입니다. 건배. – PixelShader

1

너무 가까이 찾고 있지만 ㅋ ㅋ이 = 뭔가, 내가 == 사용하지 않고 = =보다는 내부에서 할 확률을 생각하는 경우를 많이 볼 수 없습니다 문은 과제를 수행 경우 == 당신이있어

관련 문제