2010-06-08 1 views
1

좋아요, 질문이 있습니다. 선택을 위해 문자열을 사용하지 않았으므로 이제는 정수를 사용합니다. 사용자가 숫자를 입력하면 게임이 진행됩니다. 그들이 잘못된 문자를 입력하면 else 문을 사용해야하지만, 문자 나 문자를 입력하면 시스템은 무한 루프 효과를 내며 충돌합니다. 사용자가 변수의 유형을 정의하더라도 else 문을 제공하는 방법이 있습니까?cin << int 값에 대한 문자를 입력 할 때 Else 문이 충돌 함

// action variable; 
int c_action: 

if (c_action == 1){ 
    // enemy attack and user attack with added effect buffer. 
    /////////////////////////////////////////////////////// 
    u_attack = userAttack(userAtk, weapons); 
    enemyHP = enemyHP - u_attack; 

    cout << " charging at the enemy you do " << u_attack << "damage" << endl; 
    e_attack = enemyAttack(enemyAtk); 
    userHP = userHP - e_attack; 
    cout << "however he lashes back causing you to have " << userHP << "health left " << endl << endl << endl << endl; 
    //end of ATTACK ACTION 
}else{ 
    cout << "invalid actions" << endl; 
    goto ACTIONS; 
} 
+10

'goto' ?? !! ?? !!? –

+2

사용자가 입력 한 내용을 읽는 줄을 표시하지 않았습니다. –

+0

'goto ACTIONS'를 적절한 함수 호출로 바꿀 수 있다고 상상해보십시오. –

답변

1

문제는 else 문과 관련이 없지만 입력 내용은 문제가 아닙니다. 당신이

cin >> i; 

그런 짓을하고 문자를 입력하면 오류 상태가 설정되어있는 스트림 및 후속 시도는 먼저 오류 상태를 재설정하지 않으면 실패합니다 스트림에서 읽을 수 있습니다.

대신 문자열을 읽고 문자열 내용을 정수로 변환해야합니다.

+0

ha ... 40 초 늦었습니다.) – Axel

+0

고맙습니다. 훌륭한 아이디어입니다. C++을 가르치므로 많은 질문이 있습니다. – TimothyTech

+0

@ 티모시 : 기쁨을 약하게하는 것은 아니지만, 당신은 지식으로 그렇게 해칠 것입니다. 좋은 책을 가져가. http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – GManNickG

3

정수를 읽는 방법을 표시하지 않았습니다. 그러나 일반적으로이 같은 것을하고 싶지 :

int answer; 
if (cin >> answer) 
{ 
    // the user input a valid integer, process it 
} 
else 
{ 
    // the user didn't enter a valid integer 
    // now you probably want to consume the rest of the input until newline and 
    // re-prompt the user 
} 
+2

특히, cin.clear(); cin.ignore (numeric_limits :: max(), '\ n'); – user168715

2

문제는 당신 CIN 입력 버퍼의 문자를 잎, 이는 실패 후 캐릭터를 잡아하고 있다는 점이다. 당신은 CIN 근무 여부를 확인해야합니다

if(cin >> k) { ... } 

또는

cin >>k; 
if(!cin.fail()) { ... } 

를하고 실패 할 경우, 버퍼를 지우고 비트 실패 :

cin.clear(); // clears the fail bit 
cin.ignore(numeric_limits<streamsize>::max()); // ignore all the characters currently in the stream 

편집 :에서 발견된다 numeric_limits를 제한 헤더 파일 : 평소와 같이 포함 :

#include <limits> 
+2

OP 코드에서 cin을 한 번 사용하지 않았기 때문에 잘못된 코드 나 뭔가를 가져야합니다. –

+0

@ 노아 로버츠 : 그는 무한 루프가 사용자가 숫자 대신 문자를 입력함으로써 발생한다고 언급했습니다. 나는 또한 그가 cin에 대해 물었던 이전 질문에 대해 논평했다. 그래서 나는 이것이 후속 조치라고 생각했다. –