Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建菜单的基本用户输入验证(使用基本while/do-while等循环)_C++ - Fatal编程技术网

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

C++ 创建菜单的基本用户输入验证(使用基本while/do-while等循环),c++,C++,我遇到的总体问题是:我误解了如何使用循环/if-else-if逻辑正确验证菜单选择中的用户输入。我需要找出我在概念上犯了什么错误,而不是在技术上犯了什么错误(因为我们有非常具体的规则,说明如何在课堂上处理我们的课程) 问题#1=程序启动时,用户有两个选项。如果两个选项都没有被选中,那么显然需要用户输入无效字符的响应。我的问题是,当我在无效选择屏幕上时,它只允许我点击“P”开始游戏,而不允许点击“Q”结束游戏。我的循环中的某些东西只接受“P”作为有效输入来推动程序前进 我尝试过在do/while循

我遇到的总体问题是:我误解了如何使用循环/if-else-if逻辑正确验证菜单选择中的用户输入。我需要找出我在概念上犯了什么错误,而不是在技术上犯了什么错误(因为我们有非常具体的规则,说明如何在课堂上处理我们的课程)

问题#1=程序启动时,用户有两个选项。如果两个选项都没有被选中,那么显然需要用户输入无效字符的响应。我的问题是,当我在无效选择屏幕上时,它只允许我点击“P”开始游戏,而不允许点击“Q”结束游戏。我的循环中的某些东西只接受“P”作为有效输入来推动程序前进

我尝试过在do/while循环和if/elseif语句之间切换。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;

}
intmain()
{
查尔塞尔;
综合选择;
int playerChoice;

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

while (Sel != 'q' || Sel != 'Q');
应该是以下内容

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

步骤1:确保检查输入是否已成功读取。
cin>>Sel;
如果(cin>>Sel){use Sel}否则{cin.clear();cin.ignore();}
请注意,您可能需要忽略多个字符才能清除错误输入。通常情况下,您会破坏整行内容,但这可能有点过火。@user4581301谢谢您的回答。我意识到我的问题措辞不当,所以我浏览并编辑了所有内容,以提出一个更清晰、更简洁的问题。我或多或少有些挣扎关于如何正确使用循环来强迫用户选择一个或两个选项,这篇文章显然会有更好的分类。你可能会从or@DavidC.Rankin中受益,谢谢。这两个链接都不是一个与我类似的问题,但它确实让我找到了一篇与我面临的问题完全相同的文章。