Здесь у меня есть массив агентов, и я хочу инициализировать массив игроков. У агента есть только его имя. Пользователь должен ввести имя игрока, номер трикотажа и агент игрока. В этом случае я хотел, чтобы у нескольких игроков был тот же агент, поэтому я использовал указатель.C++: Как назначить объект в массиве на основе ввода пользователем?
// Default constructor = Agent(std::string = "")
Agent agents[2] = {"Larry", "Joe"};
// Default constructor = Player(std::string = "", int = 0, Agent* = 0)
Player players[3];
initializePlayers(players, 3);
void initializePlayers(Player players[], int playerSize)
{
string playerName, agentName;
int playerNum;
Agent *myAgent;
for(int i = 0; i < playerSize; i++)
{
cout << "Please enter the player's name: ";
getline(cin, playerName);
cout << "Please enter the player's number: ";
cin >> playerNum;
cout << "Please enter the player's agent: ";
getline(cin, agentName);
cin.ignore(1000, '\n');
// If the agent's name matches one of the names in agents array
// assign that agent to this player
Player tempPlayer(playerName, playerNum, myAgent);
players[i] = tempPlayer;
}
}
В моих комментариях мне нужно назначить myAgent. Например, если пользователь входит в «Ларри» для первого игрока, Ларри должен быть его агентом. Если пользователь вводит «Джо» для следующих двух игроков, они должны оба иметь Джо в качестве своих агентов. Как это сделать? Даже идея, чтобы начать меня, поможет. Спасибо.
Используйте цикл для поиска правильного агента. Найдя, назначьте его. Конец истории. –
или используйте карту string-> Agent – pm100
Это не связано с вашим вопросом, но см. Http://stackoverflow.com/questions/10553597/cin-and-getline-skipping-input. В противном случае вы получите неправильное значение 'agentName'. – Barmar