问题在字符串指针中存储单词

时间:2018-02-06 00:24:23

标签: c++ c++11

我正在尝试为包含一组名称的数组动态分配内存。内存中阵列中最多包含五个元素,用户将在一行中手动输入第一个,中间名和最后一个名称。我试图打印出数组的元素,以确保它们正确存储,但无论出于何种原因,第一个元素是空白的。我很失落。我一直试图解决这个问题,但没有成功。

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);
}

2 个答案:

答案 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