#c
#c
Вопрос:
Я создаю игру hangman на C и я близок к завершению, однако у меня есть одна серьезная проблема. Я должен заставить игру разрешить пользователю только 4 предположения, но моя программа не регистрирует правильное количество предположений.
Я попытался изменить переменные, а также условия в операторах if и else, касающиеся угадывания.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
cout << "Welcome to hangman!" << endl;
char choice = 'y';
while (choice == 'y') {
string word;
cout << "Enter a word to guess: ";
getline(cin, word);
if (word.empty()) {
cout << "The word should not be blank.n";
continue;
}
bool contain_space = false;
for (char c : word) {
if (isspace(c)) {
contain_space = true;
break;
}
}
if (contain_space) {
cout << "The word cannot contain spaces.n";
continue;
}
vector <bool> index;
for (int i = 0; i < word.size(); i ) {
index.push_back(false);
}
**int guess_correct = 0;**
int guess_wrong = 4;
char letter;
while (guess_wrong >= 0 amp;amp; guess_correct < word.size()) {
bool valid_guess = true;
cout << "Guess a letter." << endl;
cin >> letter;
for (int i = 0;i < word.size(); i ) {
if (word[i] == letter) {
valid_guess = true;
index[i] = true;
guess_correct ;
break;
}
else {
guess_wrong = guess_wrong - 1;
}
}
for (int i = 0; i < word.size(); i ) {
if (index[i] == true) {
cout << word[i] << "t";
}
else {
cout << "___t";
}
}
cout << endl;
}
cout << "Would you like to play again? (y/n)" << endl;
cin >> choice;
cin.ignore();
}
return 0;
}
Черные галочки показывают начало раздела кода, на котором я застрял. Каждый раз, когда я запускаю ее, она позволяет мне проходить игру с правильными предположениями, но неправильные предположения не допускают 4.
Комментарии:
1.
bool valid_guess = true;
вы, вероятно, хотите вместо этого инициализировать это значением false. И если оно по-прежнему равно false после вашегоfor (int i = 0;i < word.size(); i ) { }
тогда и только тогда уменьшитеguess_wrong
Ответ №1:
Вы уменьшаете значение guess_wrong
для каждой буквы в слове, которая не совпадает, ни разу для «полного предположения».
вы, вероятно, хотите вывести guess_wrong = guess_wrong - 1; // aka guess_wrong--
из цикла for и делать только это if (!valid_guess)
.