使用Getline的C ++问题

时间:2017-04-03 02:58:53

标签: c++ getline

我正在尝试创建一个程序,用户可以在其中输入一系列玩家名称和分数并将其读回。但是,我在使用getline存储输入时遇到了问题。在InputData函数的getline上,visual studio声明,“错误:没有重载函数的实例”getline“匹配参数列表参数类型是:(std :: istream,char)”,并且on ==,它说,“错误:操作数类型不兼容(“char”和“const char *”)“。这是我的代码:

#include <iostream>
#include <string>

using namespace std;

int InputData(string [], int [], int);
void DisplayPlayerData(string [], int [], int);

void main()
{
    string playerNames[100];
    int scores[100];

    int sizeOfArray = sizeof(scores);
    int sizeOfEachElement = sizeof(scores[0]);
    int numberOfElements = sizeOfArray / sizeOfEachElement;

    cout << numberOfElements;

    int numberEntered = InputData(playerNames, scores, numberOfElements);

    DisplayPlayerData(playerNames, scores, numberOfElements);

    cin.ignore();
    cin.get();
}

int InputData(string playerNames, int scores[], int size)
{
    int index;


    for (index = 0; index < size; index++)
    {
        cout << "Enter Player Name (Q to quit): ";
        getline(cin, playerNames[index]);
        if (playerNames[index] == "Q")
        {
            break;
        }
        cout << "Enter score: ";
        cin >> scores[index];
    }

    return index;
}

3 个答案:

答案 0 :(得分:2)

int InputData(string playerNames, int scores[], int size)

应该是

int InputData(string playerNames[], int scores[], int size)

在您的代码中,您将playerNames作为字符串而不是字符串数组传递。

getline(cin, playerNames[index]); playerNames[index]中是一个字符,因为playerNames是一个字符串。

答案 1 :(得分:1)

  

错误:没有重载函数“getline”匹配参数列表参数类型的实例是:(std :: istream,char)“

这意味着您将一个 char 值传递给getline()而不是整个字符串。你这样做:

getline(cin, playerNames[index])

您将playernames作为字符串变量而不是sting[]数组传递。因此,当您执行playernames[index]时,您正尝试将单个字符值传递给该函数。

根据main()函数中的代码判断,您希望将 数组 字符串传递给函数,而不是只是一个单独的字符串。

因此,请更改InputData()

的参数
int InputData(string playerNames, int scores[], int size)

要:

int InputData(string playerNames[], int scores[], int size)

** @Pinky打败我先发布答案:),但我想提供更多细节,所以我发布了答案。

另一件事,除了您想要指出的主要问题外,您应该将main()函数的返回数据类型从{int main()更改为void main() 1}}。

答案 2 :(得分:0)

我可能错了,因为我使用c ++已经很长时间了,但是你尝试过cin.getline而不是getline吗?