Попытка сравнить случайно сгенерированный массив с массивом, заполненным пользователем - PullRequest
1 голос
/ 05 августа 2020

В настоящее время я работаю над проектом по созданию игры Mastermind. Пользователь должен ввести 3 цвета, и программа сравнит, какие цвета правильные и в нужном месте, какие цвета правильные, но не в том месте, а какие цвета неправильные. Все в порядке, за исключением того, что я не могу правильно сравнить информацию в случайно сгенерированном массиве с массивом, заполненным пользователем. Я уверен, что мне пришлось бы использовать al oop, чтобы выполнить sh это. -Вещи, которые, как мне кажется, могут быть проблемой: * Информация в обоих массивах не сохраняется должным образом. * конфликтующие типы.

void gameS() {

int close, right, attempts = 0;
string choice[3],code; // holds user input
const int arrySize = 5;

srand(time(0)); //random numbers

string ranColor[arrySize] = { "R", "B", "W", "Y", "G" }; // possible color options

for (int i = 0; i < arrySize - 2; i++)  //generat random colors
{
    int rcolor = rand() % arrySize;
    code = ranColor[rcolor];
    cout << code << endl;
}


while (attempts < 10) {
    cout << "You should input your color choices below. Your options are - R : Red, B : Blue, W : White, Y : Yellow, G : Green.\n" << "Please choose 3 for your " << attempts+1 << " attempt.\n" << "******************************************************\n\n";

    cout << "\n\nPlease enter the color of the first peg: "; //user input to choice array spot : 1
    cin >> choice[0];
    cout << "\nPlease enter the color of the second peg: "; //user input to choice array spot : 2
    cin >> choice[1];
    cout << "\nPlease enter the color of the third peg: "; //user input to choice array spot : 3
    cin >> choice[2];

    attempts++; // proceeds to next turn/attempt

    //checks for correct colors in correct places
    for (int i = 0; i < 3; i++)
    {
        if (code == choice[i]) 
        {
            right++;

            choice[i] = "X";

        }
    }
    //Determin the number of right colors in the wrong place
    for (int i = 0; i < 3; i++)
    {
        for (int y = 0; y < 3; y++) {
            if (code[i] == choice[y]) {
                close++;

                choice[i] = "Y";

            }
        }
    }

}
} 

Я получаю ошибки для следующих строк:

* 'аргумент': преобразование из tim_t в беззнаковый в 'возможной потере данных

srand(time(0));

* Использование неинициализированной памяти 'right'

`if (code == choice[i]) 
        {
            right++;

            choice[i] = "X";

}`

* Использование неинициализированной памяти 'close'

`for (int i = 0; i < 3; i++)
    {
        for (int y = 0; y < 3; y++) {
            if (code == choice[y])
            {
                close++;

                choice[i] = "Y";

            }
        }
    }

* ни один оператор "==" не соответствует этим операндам . * Двоичный '==': o найден глобальный оператор, который принимает тип 'std :: string' (или нет приемлемого преобразования)

`for (int y = 0; y < 3; y++) {
            if (code[i] == choice[y])
            {
                close++;

                choice[i] = "Y";

}`

Любые подсказки приветствуются.

1 Ответ

1 голос
/ 06 августа 2020

Из того, что я вижу, есть некоторые проблемы с инициализацией.

Первый

int close, right, attempts = 0;

Оставит close и right пустым, просто правильно их инициализировать

int close = 0, right = 0, attempts = 0;

Похоже, вы хотите использовать код в качестве массива, но проблема в том, что он не инициализируется как массив

string choice[3],code; // holds user input

Быстрое исправление:

string choice[3],code[3]; // holds user input

Теперь, когда вы генерируете ответ, возникает еще одна синтаксическая проблема

code = ranColor[rcolor];

, поскольку вы хотите сохранить ответ в коде массив, индекс должен быть указан, в этом случае

code[i] = ranColor[rcolor];

Последняя проблема заключается в

//checks for correct colors in correct places
for (int i = 0; i < 3; i++)
{
    if (code == choice[i]) 
    {
        right++;

        choice[i] = "X";

    }
} 

Поскольку код теперь является массивом, просто измените выражение условия на

if (code[i] == choice[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...