我正在尝试为包含一组名称的数组动态分配内存。内存中阵列中最多包含五个元素,用户将在一行中手动输入第一个,中间名和最后一个名称。我试图打印出数组的元素,以确保它们正确存储,但无论出于何种原因,第一个元素是空白的。我很失落。我一直试图解决这个问题,但没有成功。
playerAmount是另一个函数中的一个单独变量,用户将输入他们想要的玩家数量(范围2 - 5),并且取决于该玩家,安装程序将根据用户输入的内容来询问用户的名字。 / p>
我在getName函数中遇到了问题
void amountOfPlayers(int &playerAmount) {
cout << "Enter the amount of players: ";
cin >> playerAmount;
while (cin.fail()) { // Input Validation - if user enter's letters
cout << "ERROR: must be a number, try again: ";
cin.clear();
cin.ignore(1000, '\n');
cin >> playerAmount;
}
while ((playerAmount < 2) or
(playerAmount >
5)) { // Input Validation - if user enters numbers out of range
cout << "ERROR: must be a number between 2-5, try again: ";
cin.clear();
cin.ignore(1000, '\n');
cin >> playerAmount;
}
}
void getName(int &playerAmount, string *&playerNames) {
int i = 0;
for (; i < playerAmount; i++) {
cout << "Player " << i + 1 << " enter your full name: ";
getline(cin, playerNames[i]);
cin.clear();
cin.ignore(1000, '\n');
cout << playerNames[0];
}
}
int main() {
int playerAmount;
string *playerNames = NULL;
playerNames = new string[playAmount];
amountOfPlayers(playerAmount);
getName(playerAmount, playerNames);
}
答案 0 :(得分:1)
您需要在使用之前初始化playerAmount
。
使用它时还需要正确拼写。
答案 1 :(得分:1)
问题似乎与输入缓冲区有关。我在读取playerAmount之后在amountOfPlayers()函数中使用了cin.ignore()和cin.clear():
cin >> playerAmount;
cin.ignore(1000, '\n');
cin.clear();
我测试了它似乎工作。
另外,正如Sid S在其他答案中所提到的,应该在分配字符串之前初始化playerAmount:
amountOfPlayers(playerAmount); //initialize playerAmount
playerNames = new string[playerAmount]; //allocate memory for that size