我已經編寫了一個在Linux上正常工作的hangman遊戲代碼,但現在當我在OS X上編譯它(也使用g ++)時,它的行爲非常奇怪。無法訪問If語句
我有這樣的功能稱爲getCharacter()
基本上從用戶請求的一個字符,然後(因爲我個人發現它更容易)我保存的字符作爲一種類型string
代替char
。但是,當我需要比較所選字母是否存在於單詞中時,我需要從所選單詞中提取每個字符,然後將其與用戶輸入的字符串字符進行比較。所以我做了這個非常尷尬的char
轉換,我從字符串.at(i)
函數獲得了一個臨時字符串,然後我將它與所選字母進行比較。如果匹配,則將該字母放入i
位置的矢量中。 它在Linux上運行得很好,但在這裏奇怪地說,當用戶鍵入一個字母,即使它在所選字詞中時,除非它是第一個字母,否則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