Код C ++: не обрабатывается после ввода пользовательского ввода - PullRequest
0 голосов
/ 10 марта 2020

Я изучаю C ++ в рамках курса, и, следуя и копируя части кода, я заметил, что когда я запрашиваю ввод данных пользователем и сохраняю их в массиве (не используя его для печати), код не продолжается к следующему шагу.

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

const int MAX_CHIPS = 100;
const float MAX_TURN = 0.37;

int main()
{    
    bool player1Turn = true;  
    bool gameOver = false;

    int chipsInPile = 0;
    int chipsTaken = 0;    
    string playerName[2];

    cout << "Player 1, Enter your name: \n";
    cin >> playerName[1];
    cout << "Player 2, Enter your name: \n";
    cin >> playerName[2];

    //seed the random number generator
    srand(time(0));

    //start the game with a random number of chips in the pile
    chipsInPile = (rand() % MAX_CHIPS) + 1;
    cout << "This round will start with " << chipsInPile << " chips in the pile\n";
    cout << "You can only take " << static_cast<int>(chipsInPile * MAX_TURN) << endl;

    return 0;
}

Я просто получаю в качестве вывода:

/ home / ubuntu / CLionProjects / Temp / cmake-build-debug / Temp

Player 1, введите ваше имя: стек

Player 2, введите ваше имя: переполнение

Процесс завершен с кодом выхода 139 (прерван сигналом 11: SIGSEGV)

Однако, если я уберу эту часть, запрашивая ввод пользователя. Затем я получаю последнюю часть:

/ home / ubuntu / CLionProjects / Temp / cmake-build-debug / Temp

Этот раунд начнется с 57 фишек в куче

Вы можете взять только 21

Процесс завершен с кодом выхода 0

Любая подсказка, почему он не продвигается до конца, объединяя оба вышеуказанных выхода?

1 Ответ

3 голосов
/ 10 марта 2020

Здесь:

string playerName[2];

cout << "Player 1, Enter your name: \n";
cin >> playerName[1];
cout << "Player 2, Enter your name: \n";
cin >> playerName[2];

У вас есть массив с двумя строками, но в

cin >> playerName[2];

Вы пытаетесь сохранить строку в 3-м элементе массива, который не не существует.

Это должно быть:

cout << "Player 1, Enter your name: \n";
cin >> playerName[0];
cout << "Player 2, Enter your name: \n";
cin >> playerName[1];
...