리눅스에서 정상적으로 작동하는 행맨 게임 코드를 작성했지만 현재 OS X (g ++ 사용)에서 컴파일 할 때 매우 이상하게 작동합니다.If 문에 액세스 할 수 없습니다.
나는 내가 형 대신 char
의 string
으로 문자를 저장 (나는 개인적으로 쉽게 찾을 수 있기 때문에) 기본적으로 다음, 사용자로부터 하나의 문자를 요청 getCharacter()
이라는 기능을 가지고있다. 그러나 내가 선택한 문자가 단어에 존재하는지 비교해야 할 때 선택한 단어에서 각 문자를 추출한 다음 사용자가 입력 한 문자열 문자와 비교해야합니다. 그래서 저는 을 매우 어색하게 변환했습니다.이 문자는 .at(i)
문자열의 함수에서 다음에 선택한 문자와 비교되는 임시 문자열에 이릅니다. 일치하면 문자를 i
위치의 벡터에 넣습니다. 리눅스에서 아주 효과가 있었지만, 이상하게도 사용자가 선택한 단어에 글자를 입력해도 첫 글자가 아닌 한 if()
문은 생략됩니다. 바로이 문제에 도착
void Game::getCharacter(){
string character;
cin >> character;
while((character.length() > 1) || (checkIfUsed(character))){
cout << "Not a character or already used, try again:\n";
cin >> character;
cout << endl;
}
if(RETRIES_LEFT>0){
for(int i = 0; i < DIFFICULTY; i++){
char TEMP_CHAR = CHOESENWORD.at(i);
char *TEMP_CHAR_PTR = &TEMP_CHAR;
string TEMP_STRING_LETTER(TEMP_CHAR_PTR);
if(TEMP_STRING_LETTER == character){
FRAME.at(i) = character;
GUESSED+=1;
}
}
RETRIES_LEFT-= 1;
NUM_LETTERS_USED+=1;
LETTERS_USED.push_back(character);
}
}
어디에서'RETRIES_LEFT'가 초기화됩니까? 거기에 브레이크 포인트를 두어 값을 확인 했습니까? '0'보다 큰가요? – CoryKramer
'checkIfUsed'가 어떤 식 으로든'RETRIES_LEFT'을 변경합니까? – streppel
예. 0보다 큰 경우 0으로 끝나면 끝으로 건너 뜁니다. – gEdringer