【问题标题】:if.. else.. statements not outputting expected results. While.. loop issue?if.. else.. 语句未输出预期结果。虽然..循环问题?
【发布时间】:2014-10-28 13:59:25
【问题描述】:

请注意,在用户输入之前,choiceOne_One 等于 0。
我当前的代码有问题。我希望用户能够重新输入他们的输入直到它有效,而不必关闭程序并重新打开它。因此(以及来自互联网上其他人的建议),我添加了一个 while 循环,这看起来很可靠。 出于某种原因,当用户输入 1 时,它会循环执行第一个 if 语句,就好像输入无效一样,输出“哇!这不是一个选项……等等”。我不确定如何进行这项工作,甚至不知道它有什么问题。任何帮助将不胜感激。

cin >> choiceOne_One;
    int whileInt=0;

while(whileInt == 0)
{

if (choiceOne_One != 1 || 2)
    {
        cout << "Woah! That wasn't an option! Try Again.\n";
    }

else if (choiceOne_One == 1)
    {   
        whileInt++;
        cout << "One\n";
    }


else if (choiceOne_One == 2)
    {
        whileInt++;
        cout << "Two\n";
    }
}

【问题讨论】:

  • 好的,所以它总是进入if 正文。所以拿出条件并玩弄它。

标签: c++ if-statement user-controls while-loop revert


【解决方案1】:

我相信这是因为你的 if 语句。您应该将其更改为

if (choiceOne_One != 1 && choiceOne_One != 2)

这是因为您当前的代码中未正确使用“或”语句。通过拥有

(choiceOne_One != 1 || 2)

你实际上是在说,

  • 如果 (choiceOne_One !=1)

  • 如果 (2)。

后面的语句总是正确的,因为在 C++ 中,如果你有一个 if 语句后跟一个整数,它将简单地返回布尔值“true”。

这个网站在这里告诉你更多关于它是如何工作的。 http://www.cplusplus.com/forum/articles/3483/

希望有帮助:)

【讨论】:

    【解决方案2】:

    这个问题是因为choiceOne_One != 1 || 2被解析为(choiceOne_One != 1) || 2,它总是被条件接受(因为2是一个独立于选择的“真”值)。

    [我推荐]“修复”此代码的方式是使用else,而不是更改条件,尽管这样也可以。考虑;

    if (choiceOne_One == 1)
        {   
            whileInt++;
            cout << "One\n";
        }       
    else if (choiceOne_One == 2)
        {
            whileInt++;
            cout << "Two\n";
        }
    else // only here if NONE of the above conditions are true
        {
            cout << "Woah! That wasn't an option! Try Again.\n";
        }
    

    还有,

    1. 在循环内部读取输入值。目前,choiceOne_One 在所示循环运行时永远不会改变 - 这将导致循环立即终止或 从不 终止。
    2. whileInt 可以/应该更改或消除 - 使用布尔标志或中断/返回。

    【讨论】:

      【解决方案3】:

      你必须完成你的 if 语句:

      if (choiceOne_One != 1 && choiceOne_One != 2)
         {
          cout << "Woah! That wasn't an option! Try Again.\n";
         }
      

      double || 表示 or&amp;&amp; 表示 and 因此需要满足这两个条件才能打印

      【讨论】:

        【解决方案4】:

        问题出在if(choiceOne_One != 1 || 2)这一行

        您必须将此扩展为if(choiceOne_One != 1 &amp;&amp; choiceOne_One != 2)

        原因是在 C++ 中,如果整数非零,则其计算结果为 true。因此,根据您的原始声明,choiceOne_One != 1 || 2 变为 choiceOne_One != 1 || true,当然任何与 true 进行或运算的内容都是 true

        【讨论】:

        • 谢谢,我想我之所以这样写是因为我对c++还是不熟悉,因为java是我的第一语言。
        【解决方案5】:

        在编辑了第一个 if() 条件之后,就像你们中的一些人指出的那样,我意识到我仍然遇到程序无限循环通过第一个语句的问题。我也意识到这是因为我没有写一行让用户有机会输入有效的东西(意识到这一点感觉很好)。所以,我熟练地剪切并粘贴了“cin >> choiceOne_One;”行从 while() 循环外进入 while() 循环和 瞧! 它起作用了。回想起来,我应该早点注意到这一点。

        【讨论】:

          【解决方案6】:
          cin >> choiceOne_One;
          while(true)
          {
          if (choiceOne_One != 1 && choiceOne_One != 2)
          {   
              cout << "Woah! That wasn't an option! Try Again.\n";
              cin >> choiceOne_One;
          }else if(choiceOne_One == 1){
          
              cout << "One\n";
              break;
          
          }else if (choiceOne_One == 2){
           cout << "Two\n";
              break; 
           }
          }
          

          对不起,我没有 c++ 编译器来测试这段代码,但我认为这对你有用

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-11-28
            • 1970-01-01
            • 1970-01-01
            • 2020-03-24
            • 1970-01-01
            • 2015-10-28
            • 2020-03-11
            • 1970-01-01
            相关资源
            最近更新 更多