수정 됨. 고맙습니다.부울에 따라 do/while 루프를 종료하는 데 문제가 있습니다. - C++
아래의 코드에서는 컴파일 및 실행되지만 do/while 루프가 작동하지 않습니다. 반환 값은 작동하지만 while 루프는이를 인식하지 않아야하며 무기한으로 이동합니다. 나는 진실하고 틀린 반환을받을 수있다. 둘 다 루프를 멈추지 않습니다. 정말로 여기에서 길을 잃었고 대답을 찾을 수 없습니다. 고맙습니다.
//helper function for inputGuess
//checks if the user's guess is in the lowercase alphabet and that
// it has not been guessed before
bool Hangman::validGuess() {
//checks if the character guess is in the lowercase alphabet
if (guess >= 97 && guess <= 122) {
//checks if the user's guess has been guessed previously
if (guessed.size() > 0) {
for (int i = 0; i < guessed.size(); i++) {
cout << "enter for\n";
cout << "guess[i]: " << guessed[i] << endl;
if (guess != guessed[i]) {
cout << "1st true: guess has not been guessed\n";
return true;
}
else {
cout << "1st false: same letter\n";
return false;
}
}
}
else {
cout << "2nd true: guessed size is 0\n";
return true;
}
}
else {
cout << "2nd false: not alphabet\n";
return false;
}
}
//gets input for guess, checks if guess is valid, adds guess to guessed
void Hangman::inputGuess() {
bool valid = false;
do {
cout << "Please enter your guess: ";
cin >> guess;
cout << endl;
valid = validGuess();
cout << "valid: " << valid << endl;
} while (valid == false);
guessed.push_back(guess);
}
실행중인 시스템이 ASCII를 사용한다고 가정 할 수는 없습니다. 그렇게해도 "97"보다 훨씬 명확합니다. "islower"기능도 있습니다. – chris
당신이 보여준 코드는 그 자체로 문제가 아니지만 또한 완벽하지는 않습니다. 나는 다른 외부 루프가 있다고 생각할 것이고이 외부 루프에 갇혀있다. 나머지 코드를 추가하십시오 (지나치게 많지 않은 경우). –
코드가 컴파일되지 않아야합니다 ('추측은'validGuess()'에 선언되지 않습니다), 어떻게하면 그 코드를 실행시킬 수 있었습니까 ??? – Walter