Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2020, 15:29   #1
Monstih
Новичок
Джуниор
 
Регистрация: 31.01.2020
Сообщений: 2
По умолчанию Зацикливается программа при вводе буквы, которую уже вводили.

Всем привет! Подскажите, пожалуйста, почему при вводе буквы, которую уже вводил, игра зацикливается и при любом вводе буквы она выдает, что вы вводили букву "N". Строка, где фраза "Вы уже вводили букву: ". Суть задачи по книге - создать функцию, которая будет принимать от пользователя его вариант. Пытался break; в цикл вставить, получается следующее: мы вводим букву, которую вводили, затем пишем другую букву, но она не учитывается в игре, что мы ее назвали и не отображается в графе "Введенные буквы" и только после этого ввода функционал считывания буквы возобновляется.

Вот как выглядит результат: http://joxi.ru/8An7K7jU7jo5Pr

Код:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cctype>

using namespace std;
char uzerVar();

int main()
{
    vector<string> words;
    words.push_back("GLASS");
    words.push_back("PEOPLE");
    words.push_back("MOTHER");
    srand(static_cast <unsigned int>(time(0)));
    random_shuffle(words.begin(), words.end());
    const int MAX_WRONG = 8;
    const string THE_WORD = words[0];
    int wrong = 0;
    string soFar(THE_WORD.size(), '-');
    string used = "";
    cout << "Добро пожаловать в Виселицу. Удачи!";
    
    while ((wrong < MAX_WRONG) && (soFar != THE_WORD)) {
        cout << "\n\nУ вас " << (MAX_WRONG - wrong) << " попыток угадать букву.\n";
        cout << "\nВы назвали следующие буквы:\n" << used << endl;
        cout << "\nЗагаданное слово:\n" << soFar << endl;
        
        char guess = uzerVar();
        
        while (used.find(guess) != string::npos) {
            cout << "\nВы уже вводили букву " << guess << endl;
            uzerVar();
        }
        used += guess;
        if (THE_WORD.find(guess) != string::npos) {
            cout << "Так держать! Буква " << guess << " есть в слове.\n";
            
            for (int i = 0; i < THE_WORD.length(); i++) {
                
                if (THE_WORD[i] == guess) {
                    soFar[i] = guess;
                }
            }
        }
        else {
            cout << "Неверно! Буквы " << guess << " нет в слове.\n";
            ++wrong;
        }
    }
    
    if (wrong == MAX_WRONG) {
        cout << "\nВас повесили! Загаданное слово было " << THE_WORD << endl;;
    }
    else {
        cout << "\nПоздравляем! Вы угадали слово " << THE_WORD << endl;;
    }
    return 0;
}

char uzerVar() {
    char buk;
    cout << "\n\nВведите букву: ";
    cin >> buk;
    buk = toupper(buk);
    
    return buk;
}

Последний раз редактировалось Monstih; 31.01.2020 в 20:33.
Monstih вне форума Ответить с цитированием
Старый 31.01.2020, 20:30   #2
Monstih
Новичок
Джуниор
 
Регистрация: 31.01.2020
Сообщений: 2
По умолчанию

Вопрос решен.

Код:
35 строка - guess = uzerVar();

Последний раз редактировалось Monstih; 31.01.2020 в 20:32.
Monstih вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler TASM Зацикливается программа fen_x Помощь студентам 1 16.12.2018 04:08
Выдать ошибку при вводе буквы AleksZh Общие вопросы C/C++ 1 20.11.2018 23:25
Зацикливается программа? Почему? ivt22 Общие вопросы Delphi 4 06.11.2013 11:44
задача на Си,Ввести строку, в которую могут входить только цифры и буквы. vinternete Помощь студентам 0 11.07.2011 12:35
программа зацикливается Юрий_91 Общие вопросы C/C++ 4 24.04.2010 16:23