C ++ Случайный массив строк Если оператор выводит только один ответ - PullRequest
0 голосов
/ 27 апреля 2020

Это мой первый фрагмент кода, который я разработал самостоятельно и столкнулся с проблемой. Ive Googled вопрос и не преобладают. Я делаю игру Rock Paper Scissors и у меня есть вход, в котором вы выбираете либо Rock Paper, либо Scissors. После того, как вы выбрали, программа случайным образом выводит либо Rock Paper, либо Scissors, теперь моя проблема связана с операторами If после случайного вывода, он только выбирает:

{
   cout << ", you lose! Do you want to play again? (Yes / No)";
}         

Принимая во внимание, что это мой код здесь:

#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main()
{
    // yn = yes / no
    string yn;
    cout << "Do you want to play Rock, Paper, Scissors? (Yes / No) ";
    cin >> yn;
    if (yn == "Yes")
    {
        // rps = rock paper scissors
        string rps;
        cout << "Choose, Rock, Paper, or Scissors\n";
        cin >> rps;

        if (rps == "Rock")
        {
            // Randomizer 
            srand(time(0));
            string rpslist[3] = { "Rock", "Paper", "Scissors " };
            int rpsnumber = rand() % 3;
            cout << "I choose: " << rpslist[rpsnumber];

            if (rpslist[1] == "Rock")
            {
                cout << ", we draw! Do you want to play again? (Yes / No)";
            }
            if (rpslist[2] == "Paper");
            {
                cout << ", you lose! Do you want to play again? (Yes / No)";
            }         
            if (rpslist[3] == "Scissors")
            {
                cout << ", you win! Do you want to play again? (Yes / No)";
            }
        }

1 Ответ

1 голос
/ 27 апреля 2020

Я хотел бы указать на несколько вещей. Самая важная часть, которая может решить вашу проблему, является 3-й и 4-й. Но прочитайте их все, я думаю, что было бы важно знать.

1) Когда вы проверяете элементы массива, вы всегда начинаете с индекса 0. Так что в этом случае «Rock» будет в соответствии с rpsList [0], Paper будет соответствовать rpsList [1] и т. д. Поэтому, когда вы говорите if (rpsList [1] == "Rock"), это явно неправильно, потому что rpsList [1] - это Paper.

2) 1201ProgramAlarm указал на это, у вас есть точка с запятой после оператора if для бумаги.

3) Вместо этого ваши операторы if следует заменить на операторы if-else-if. if (rpList [0] == "Rock) ... else if (rpList [1] ==" Paper "). Что произойдет, если у вас есть отдельные операторы if, будет проверяться каждый оператор if, даже если условия false. Выполнение оператора else if после вашего первого оператора if позволит вам пропустить избыточные проверки, как только вы обнаружите, что любое из утверждений истинно.

4) Ваши операторы if ничего не делают с случайное число, сгенерированное ранее. Вместо этого вы проверяете, является ли первый элемент Rock, вторым элементом Paper или третьим элементом Scissors, и в этом случае они находятся в этой последовательности, поскольку именно так вы расположили строковый массив. Сделайте это вместо:

if (rpList[rpsNumber] == "Rock")
{
...
}
else if (rpList[rpsNumber] == "Paper")
{
...
}
else if (rpList[rpsNumber] == "Scissors")
{
...
} 
...