Возникли проблемы при передаче массива в функцию - PullRequest
1 голос
/ 29 марта 2011

Я получаю все виды ошибок при передаче моего массива в эту функцию. Предполагается, что функция позволяет пользователю вводить имя и счет и сохранять их в 2 отдельных массивах, один для имен, один для баллов. Я считаю, что я должен использовать указатели, но понятия не имею, как их использовать. Я не хочу ответа, просто толчок в правильном направлении. Вот код:

#include <iostream>

int InputData(int &, char, int);

using namespace std;

int main()
{
    char playerName[100][20];
    int score[100];
    int numPlayers = 0;

    InputData(numPlayers, playerName, score);
    return 0;
}

int InputData(int &numPlayers, char playerName[][20], int score[])
{
    while (numPlayers <= 100)
    {
        cout << "Enter Player Name (Q to quit): ";
        cin.getline(playerName, 100, ‘\n’);
        if ((playerName[numPlayers] = 'Q') || (playerName[numPlayers] = 'q'))
        return 0;
        cout << "Enter score for " << playerName[numPlayers] <<": ";
        cin >> score[numPlayers];
        numPlayers++;
    }
}

Хорошо, я сделал еще несколько изменений, и ошибок стало меньше, должно быть, близко, Lol!

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Хранение ошибок в стороне -

InputData(numPlayers, playerName, score, size);
                                      // ^^^^ size is no where declared
                                      // resulting Undeclared indentifier error

Прототип упоминает о том, что принимает 3 аргумента, но вызывает функцию, передающую 4 параметра.

Подсказка относительно ошибок:

  • 1D массив распадается на указатель, указывающий на первый элемент в массиве при передаче функции.
  • 2D-массив распадается на указатель, указывающий на 1D-массив (т. Е. T [] [size]) при передаче функции.
  • Возвращаемый тип main() должен быть int .

Кажется, с учетом подсказок вы исправили большинство ошибок. Но вы забыли изменить прототип. Итак, измени -

int InputData(int &, char, int);

до

int InputData(int &, char[][20], int[]);

Почему вы не используете массив std :: string для имен игроков? Используйте его и удалите оставшиеся ошибки. Удачи.

1 голос
/ 29 марта 2011

Это похоже на школьное задание, и я приветствую вас за то, что вы не спросили ответа. Есть несколько способов сделать это, но вы уже достаточно близки в подходе, который вы используете. Когда вы передаете ссылку на массив, вы не хотите включать длину массива. Например, параметр int score[100] должен быть int score[]. Исключением, особенно в вашем сценарии, являются многомерные массивы. В этом случае вы хотите использовать char playerName[][20]. Ваше объявление функции также должно измениться, чтобы соответствовать. Не забудьте, что InputData возвращает int. Ваши объявления и вызов функции верны; вам просто нужно настроить сигнатуру вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...