为什么只输出第一个字符,为什么WHILE会激活?

时间:2014-11-26 21:40:12

标签: c++

提前感谢您的任何帮助。

我已经有一段时间了,

#include <iostream>
#include <string>
using namespace std;
void InputData(string PlayerName, string Score);
int x = 0;

int main()
{
    string PlayerName[100];
    string Score[100];
    InputData("PlayerName","Score");
}

//input the player name and score into the arrays for an unknown number of players
void InputData(string PlayerName, string Score){

    do{
        cout << "Enter Player Name (Q to quit): ";
        getline(cin, PlayerName);
        cout << "Enter Score for " << PlayerName[x] << ": ";
        getline(cin, Score);

        x++;
    }while(PlayerName[x] != 'Q');

    cout << "Name \n Score" << endl;
    cout << PlayerName[0] << "\n" << Score[0];
}

特别是:

cout << "Enter Player Name (Q to quit): ";
getline(cin, PlayerName);
cout << "Enter Score for " << PlayerName[x] << ": ";
getline(cin, Score);

x++;
}while(PlayerName[x] != 'Q');

为什么Playername只给我第一个字符,为什么当我点击Q时,它不会退出。另外,我不确定如何在另一个函数中正确输出它,因为数组设置为&#34;高达100&#34;。我必须在另一个变量中做。

2 个答案:

答案 0 :(得分:1)

void InputData(string PlayerName, string Score)

InputData内,PlayerNameScore是单个string个对象 - 而不是数组。如果您执行PlayerName[x],则表示您正在访问字符串x的{​​{1}}字符。

对于如何将PlayerName中声明的数组传递给函数,显然存在一些混淆:

main

在这里,您声明两个数组,然后不对它们执行任何操作。相反,您将字符串int main() { string PlayerName[100]; string Score[100]; InputData("PlayerName","Score"); } "PlayerName"传递给"Score"。我很确定这不是你想要的!相反,您希望传递数组InputDataPlayerName。但是,这意味着您需要修复Score函数的参数类型:

InputData

现在你可以将你的数组传递给这个函数了(好吧,不是技术上的,但我不想让你迷惑)。现在尝试修复其余的代码。请注意,您现在需要使用void InputData(string PlayerName[], string Score[]) xPlayerName数组编制索引(并且您应该将Score设为局部变量。)

答案 1 :(得分:0)

这里发生的是你正在递增x然后检查条件:while(PlayerName[x] != "Q");

x现在指向下一个位置。因此,您无法获得所需的结果。

do{
    cout << "Enter Player Name (Q to quit): ";
    getline(cin, PlayerName[x]);
    cout << "Enter Score for " << PlayerName[x] << ": ";
    getline(cin, Score[x]);

    if (PlayerName[x] != "Q")
        x++;
}while(PlayerName[x] != "Q");

例如,您可以检查if (PlayerName[x] != "Q") { ++x; }或者在得到“问题”后立即break {Q}作为玩家名称,以防止在您明确想要退出时输入分数。

此外,如果您想要浏览数组,请将其传递给函数,最好通过引用:

void InputData(string (&PlayerName)[100], string (&Score)[100]);