使用 Getline 的 C++ 问题
C++ Issue Using Getline
我正在尝试创建一个程序,用户可以在其中输入一系列玩家姓名和分数并读回它们。但是,我在使用 getline 存储他们的输入时遇到了问题。在 InputData 函数的 getline 上,visual studio 状态,"Error: no instance of overloaded function "getline" 匹配参数列表参数类型是:(std::istream, char)",在 == 上,它说,"Error: operand types are incompatible ("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;
}
int InputData(string playerNames, int scores[], int size)
应该是
int InputData(string playerNames[], int scores[], int size)
在您的代码中,您将 playerNames
作为字符串而不是字符串数组传递。
在getline(cin, playerNames[index]);
中playerNames[index]
是一个字符,因为playerNames
是一个字符串。
我可能是错的,因为我已经很长时间没有使用 c++了,但是你试过 cin.getline 而不是 getline 吗?
Error: no instance of overloaded function "getline" matches the argument list argument types are: (std::istream, char)"
这意味着您正在将单个 char 值而不是整个 string 传递给 getline()
。您在以下时间执行此操作:
getline(cin, playerNames[index])
您将 playernames
作为字符串变量而不是 sting[]
数组传递。因此,当您执行 playernames[index]
时,您试图将 单个字符值 传递给函数。
从你的 main()
函数中的代码来看,你想将一个 array 的字符串传递给函数,不只是一个单独的字符串。
因此,更改 InputData()
的参数
int InputData(string playerNames, int scores[], int size)
收件人:
int InputData(string playerNames[], int scores[], int size)
**@Pinky 抢先发布答案:),但我想提供更多细节,所以我发布了我的答案。
另一件事,除了我想指出的主要问题之外,您应该更改 main()
函数的 return 数据类型从 void main()
.
到 int main()
我正在尝试创建一个程序,用户可以在其中输入一系列玩家姓名和分数并读回它们。但是,我在使用 getline 存储他们的输入时遇到了问题。在 InputData 函数的 getline 上,visual studio 状态,"Error: no instance of overloaded function "getline" 匹配参数列表参数类型是:(std::istream, char)",在 == 上,它说,"Error: operand types are incompatible ("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;
}
int InputData(string playerNames, int scores[], int size)
应该是
int InputData(string playerNames[], int scores[], int size)
在您的代码中,您将 playerNames
作为字符串而不是字符串数组传递。
在getline(cin, playerNames[index]);
中playerNames[index]
是一个字符,因为playerNames
是一个字符串。
我可能是错的,因为我已经很长时间没有使用 c++了,但是你试过 cin.getline 而不是 getline 吗?
Error: no instance of overloaded function "getline" matches the argument list argument types are: (std::istream, char)"
这意味着您正在将单个 char 值而不是整个 string 传递给 getline()
。您在以下时间执行此操作:
getline(cin, playerNames[index])
您将 playernames
作为字符串变量而不是 sting[]
数组传递。因此,当您执行 playernames[index]
时,您试图将 单个字符值 传递给函数。
从你的 main()
函数中的代码来看,你想将一个 array 的字符串传递给函数,不只是一个单独的字符串。
因此,更改 InputData()
int InputData(string playerNames, int scores[], int size)
收件人:
int InputData(string playerNames[], int scores[], int size)
**@Pinky 抢先发布答案:),但我想提供更多细节,所以我发布了我的答案。
另一件事,除了我想指出的主要问题之外,您应该更改 main()
函数的 return 数据类型从 void main()
.
int main()