Возврат нескольких значений с использованием функций - PullRequest
1 голос
/ 09 июня 2019

Я просто пробую разные вещи, кодирующие игру «камень, бумага, ножницы», используя класс / функции. Все работает просто отлично, за исключением отображения результатов того, сколько раз выиграл пользователь, выиграл компьютер и количество связей.

Я кодирую это в vs-code. Я посмотрел несколько примеров того, как вернуть более одного значения, и нашел это полезным. В настоящее время я использую указатели для этого метода, однако я не уверен, ограничен ли он в зависимости от результата кода.

void winner(int* U, int* C, int* T)
{
    *U = userWin
    *C = compWins;
    *T = numTies;

    if(compChoice == userChoice){
    std::cout << "It's a tie!\n";
    numTies++;
    }
    else if(userChoice == 'P' && compChoice == 'R'){
        std::cout << "You win! Paper covers rock.\n";
        userWins++;
    }
    else if(userChoice == 'S' && compChoice == 'R'){
        std::cout << "Computer wins! Rock beats scissors.\n";
        compWins++;
    }
    else if(userChoice == 'S' && compChoice == 'P'){
        std::cout << "You win! Scissors beats paper.\n";
        userWins++;
    }
    else if(userChoice == 'R' && compChoice == 'P'){
        std::cout << "Computer wins! Paper covers rock.\n";
        compWins++;
    }
    else if(userChoice == 'R' && compChoice == 'S'){
        std::cout << "You win! Rock beats scissors.\n";
        userWins++;
    }
    else if(userChoice == 'P' && compChoice == 'S'){
        std::cout << "Computer wins! Scissors beats paper.\n";
        compWins++;
    }
    else std::cout << "Invalid input.\n";
    std::cout << "\n";


}


int main(){

  rps obj;
  char char1('y');
  int userWins;
  int compWins;
  int numTies;

  std::cout << "THIS IS A GAME OF ROCK, PAPER, SCISSORS!\n";

  do{

    obj.player();
    obj.computer();
    obj.winner(&userWins, &compWins, &numTies);

    std::cout << "Enter y to play again or anything else to win: ";
    std::cin >> char1;
    std::cout << "\n";

  }while(char1 == 'y' || char1 == 'Y' );

  obj.results();


...
Please enter Rock, Paper, or Scissors - 'R' for Rock, 'P' for Paper,        'S' for Scissors: R

The computer chose scissors.

You win! Rock beats scissors.

Enter y to play again or anything else to win: n

Here are the results...
YOU: 1  COMPUTER: -416437631  TIES: 32769

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

Ответы [ 2 ]

1 голос
/ 09 июня 2019

Вы забыли инициализировать свои переменные.В main измените объявления на:

int userWins = 0;
int compWins = 0;
int numTies = 0;

Затем, в winner, избавьтесь от:

*U = userWin
*C = compWins;
*T = numTies;

и измените:

userWins++;

to:

(*U)++;

и аналогично для других счетчиков.

0 голосов
/ 09 июня 2019

В основной функции вам нужно инициализировать переменные типа int начальными значениями «0». Это помешает компилятору выдавать эти переменные, ненужные значения, которые вы видите там.

int main(){

    rps obj;
    char char1('y');
    int userWins=0;
    int compWins=0;
    int numTies=0;
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...