我已经编写了一个在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