C++ C++;:处理输入 chard; 做 { cout

C++ C++;:处理输入 chard; 做 { cout,c++,C++,循环在d的值为“1”或“2”或“3”时执行。要执行循环直到它接受有效输入,只需更改如下代码中的条件 char d; do { cout<<"1.Easy\n"; cout<<"2.Medium\n"; cout<<"3.Hard\n"; cout<<"Choose your difficulty:"; cin>>d; if (d=='1') { //function

循环在d的值为“1”或“2”或“3”时执行。要执行循环直到它接受有效输入,只需更改如下代码中的条件

char d;
do
{
    cout<<"1.Easy\n";
    cout<<"2.Medium\n";
    cout<<"3.Hard\n";
    cout<<"Choose your difficulty:";
    cin>>d;
    if (d=='1')
    {
        //function call
        break;
    }
    else
    if (d=='2')
    {
        //function call
        break;
    }
    else
    if (d=='3')
    {
        //function call
        break;
    }
    else
        cout<<"Invalid Input!\n";
}while (d=='1' || d=='2' || d=='3') ;
chard;
做
{

cout仅当d==“1”、“2”或“3”时才执行循环。您需要检查以确保它不是这些字符之一。这可以通过对代码进行以下调整来完成:

char d;
do
{
    cout<<"1.Easy\n";
    cout<<"2.Medium\n";
    cout<<"3.Hard\n";
    cout<<"Choose your difficulty:";
    cin>>d;
    if (d=='1')
    {
        a.setdifficulty("Easy");
        break;
    }
    else
    if (d=='2')
    {
        a.setdifficulty("Medium");
        break;
    }
    else
    if (d=='3')
    {
        a.setdifficulty("Hard");
        break;
    }
    else
        cout<<"Invalid Input!\n";
}while (d!='1' && d!='2' && d!='3') ;

希望这会有所帮助。

这是您想要的代码……您的代码将始终执行一次……对于输入1、2、3,您会中断外观,如果输出无效,则在while循环中您的条件不匹配

char d;
do
{
..........
}while ( ! (d=='1' || d=='2' || d=='3') ) ;
do
{

cout如果在每个有效情况下都有
中断
,则无需检查
while
条件中的
d
值:

do
{
    cout<<"1.Easy\n";
    cout<<"2.Medium\n";
    cout<<"3.Hard\n";
    cout<<"Choose your difficulty:";
    cin>>d;
    if (d=='1')
    {
        cout<<"Easy";
        break;
    }
    else
        if (d=='2')
        {
            cout<<"DIFF";
            break;
        }
        else
            if (d=='3')
            {
                cout<<"Hard";
                break;
            }
            else
                cout<<"Invalid Input!\n";
}while (d!='1' || d!='2' || d!='3') ;
while(true){

如果这应该一直运行到
d
为1、2或3,那么while条件不应该包含在not运算符中吗?
while(!(d='1'| d='2'| d='3'))
?抛开所有其他问题不谈,该程序可能在标准输出刷新之前退出。我在MSVC 2013中对此进行了测试,并获得了预期的输出。除了
while()中的条件之外
,发布的代码在我看来还行。好吧,这肯定会重新开启无刷新理论。看起来你还有另一个问题需要问。拿出(为我们)不可编译的
a.setconstitution
垃圾,看看它是否仍然爆炸。下次,发布(为我们)编译的代码并演示了问题。我们不知道
a
是什么,它来自哪里,设置难度是什么,等等。如果要重写while条件,可以编写一个如下所述的条件:
while(d!=“1”&&d!=“2”&&d!=“3”);
就是这样一种可能性。while条件将始终为true。这是由于
break
语句才起作用的。只需将该条件替换为
true
。正确的逻辑,但OP的break语句使其变得毫无意义。@user4581301非常正确,但我发现通常最好向某人展示如何修复其逻辑;正如ed开始对问题应用补丁,并将while(true)与break语句一起使用。(别误会,我喜欢break语句,并且一直使用它们。但是在这种情况下,它们不是必需的。正确的逻辑是更优雅的解决方案。)你知道吗?我同意你的看法。就我个人而言,我会用一个开关来替换ifs,这会把破坏循环的中断语句弄得一团糟。@user4581301开关在我看来在这种情况下也会更出色。然而,OP只是要求修复结束逻辑,而不是评估逻辑。
while (true) {
        cout << "1.Easy\n";
        cout << "2.Medium\n";
        cout << "3.Hard\n";
        cout << "Choose your difficulty:";
        cin >> d; 
        if (d == '1') {
                a.setdifficulty("Easy");
                break;  
        }       
        else if (d == '2') {
                a.setdifficulty("Medium");
                break;  
        }       
        else if (d == '3') {
                a.setdifficulty("Hard");
                break;  
        }       
        else    
                cout << "Invalid Input!\n";
}