我编写的validatePlay函数应该接受与播放类型匹配的输入字符。

char validatePlay();

void getHandPlayed(char);


int main()
{

    char play= validatePlay();

    validatePlay();

    getHandPlayed(play);

    system("pause");
}

char validatePlay()
{
    char play;
    cout << "enter play (R)ock, (P)aper or (S)cissor ";
    cin >> play;
    while (cin.fail() || play != 'R' && play != 'P' && play != 'S')
    {
        cin.clear();
        cin.ignore(80, '\n');
        cout << "re-enter play (R)ock, (P)aper or (S)cissor ";
        cin >> play;
    }
    return play;

}

void getHandPlayed(char play)
{

    switch(play)
    {
        case 'R':
            cout << "Rock"<<endl;
            break;
        case 'P':
            cout << "Paper"<<endl;
            break;
        case 'S':
            cout << "Scissors"<<endl;
            break;

    }
}


它可以正常工作,但是由于某种原因,无论输入什么,cout和cin都会出现两次,但是它只会吸收我输入的第一个字符。最终看起来像这样。

输入播放(R)ock,(P)aper或(S)剪刀S

输入播放(R)ock,(P)aper或(S)剪刀R

剪刀

按任意键继续 。 。 。

我无法弄清楚我在做什么错。

最佳答案

您两次调用validatePlay()。

第一次在这里:

char play= validatePlay();


第二次是在这里:

validatePlay();


您仅存储和使用第一个调用的结果。

10-04 18:48