为菜单创建基本的用户输入验证(使用基本的while / do-while等循环)

时间:2019-04-05 20:55:15

标签: c++

我遇到的总体问题:我误会了如何使用循环/ if-else-if逻辑来正确验证菜单选择中的用户输入。我需要弄清楚自己在做的是概念上的错误,而不是技术上的错误(因为我们在课堂上如何处理程序有非常具体的规则)。

问题1 =程序启动时,用户有两个选择。如果两个选项均未选中,则显然需要响应用户输入了无效字符。我的问题是,当我进入无效选择屏幕时,只允许我按“ P”开始游戏,而不能按“ Q”结束游戏。我循环中的某件事仅接受“ P”作为有效的输入来推动程序前进。

我尝试在do / while循环和if / else if语句之间进行切换。 do / while循环提供的问题最少,同时仍然保留了一些问题。

我只是在第二门编程课上,所以我可能无法给出更好的详细答案,而我尝试了不同的循环并移动了一些代码,对不起。

我只打算发布程序的int main(),因为其中包含我遇到问题的菜单。还有一些其他功能可以让用户输入类似的问题,但是如果我在此处解决了概念性错误,可以在此之后进行解决。

int main()
{
    char Sel;
    int compChoice;
    int playerChoice;

    cout << "\n";
    cout << "ROCK PAPER SCISSORS MENU" << endl;
    cout << "------------------------" << endl;
    cout << "p) Play Game" << endl;
    cout << "q) Quit" << endl;
    cout << "Please enter your choice:" << endl;
    cin >> Sel;

    if (Sel == 'q' || Sel == 'Q')
    {
        cout << "You have chosen to exit, thanks for playing" << endl;

    }

    do
    {

        if (Sel == 'p' || Sel == 'P')
        {
            playerChoice = getPlayerChoice();
            compChoice = getComputerChoice();

            if (isPlayerWinner(compChoice, playerChoice))
            {
                cout << "Winner Winner Chicken dinner" << endl;
            }
            else if (!isPlayerWinner(compChoice, playerChoice))
            {
                cout << "You lose this round" << endl;
            }

            else if (isTie(compChoice, playerChoice))
            {
                cout << "You have Tied" << endl;
            }
            else
            {
                cout << "Thanks for playing" << endl;
                return 0;
            }
        }
       else
        {
            cout << "Invalid selection, please try again by hitting 'p' or 'q'." << endl;
            cin >> Sel;

        }
    } while (Sel != 'q' || Sel != 'Q');

    system("PAUSE");
    return 0;

}

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

罪魁祸首是do / while循环末尾的这一行。

while (Sel != 'q' || Sel != 'Q');

应为以下内容。

while (Sel != 'q' && Sel != 'Q');