if .. else ..语句没有输出预期结果。虽然..循环问题?

时间:2014-09-03 23:07:31

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

请注意,在用户输入之前,choiceOne_One等于0.
我的当前代码存在问题。我希望用户能够重新输入他们的输入,直到它有效,而不必关闭程序并重新打开它。因为这个(以及其他人对interwebs的建议),我添加了一个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";
    }
}

6 个答案:

答案 0 :(得分:1)

我相信这是因为你的if声明。你应该把它改成

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

这是因为在当前代码中未正确使用'或'语句。通过

(choiceOne_One != 1 || 2)

你基本上是在说,

  • if(choiceOne_One!= 1)

OR

  • if(2)。

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

此网站在这里告诉您更多有关其如何运作的信息。 http://www.cplusplus.com/forum/articles/3483/

希望有所帮助:)

答案 1 :(得分:1)

导致问题的原因是choiceOne_One != 1 || 2被解析为(choiceOne_One != 1) || 2,条件总是被else解析(因为2是&#34; true&#34;值与选择无关)。

[我推荐]以及#34;修复&#34;此代码使用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"; } 而不是更改条件,尽管这样也可以。考虑;

whileInt

另外,

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

答案 2 :(得分:0)

您必须填写if语句:

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

加倍||表示or&&表示and因此需要满足两个条件才能打印

答案 3 :(得分:0)

问题是行if(choiceOne_One != 1 || 2)

您必须将其展开为if(choiceOne_One != 1 && choiceOne_One != 2)

原因是在C ++中,如果整数非零,则整数计算为true。因此,对于您的原始陈述,choiceOne_One != 1 || 2变为choiceOne_One != 1 || true,当然与true进行“或”的任何行为都是true

答案 4 :(得分:0)

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 ++编译器来测试这段代码,但我认为这可以和你一起使用

答案 5 :(得分:0)

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