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

问题描述:

请注意,在用户输入之前,choiceOne_One等于0。
我有我的当前代码的问题。我希望让用户能够重新键入他们的输入,直到它有效,而不必关闭程序并重新打开它。由于这一点(以及来自互联网上其他人的建议),我添加了一个while循环,这看起来很稳固。 由于某些原因,当用户输入1时,它会循环显示第一条if语句,就像输入无效一样,输出“Woah!这不是一个选项..”等等。我不知道如何使这项工作,甚至有什么问题。任何帮助将非常感激。if .. else ..语句不输出预期的结果。虽然..循环问题?

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"; 
    } 
} 
+0

好吧,所以它总是进入那个'if'的身体。所以要把这个条件拿出来玩一下。 – chris 2014-09-03 23:10:47

你必须完成你的if语句:

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

||意味着or&&意味着and这样两个条件需要满足它打印

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

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

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

(choiceOne_One != 1 || 2) 

你基本上是说,

  • 如果(choiceOne_One!= 1)

OR

  • 如果(2)。

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

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

希望帮助:)

+0

@AlexD编辑,谢谢:) – jj172 2014-09-03 23:10:43

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

则必须将此扩大到if(choiceOne_One != 1 && choiceOne_One != 2)

的原因是,在C++中,整数计算为true如果他们是非零。所以你的原始声明,choiceOne_One != 1 || 2变成choiceOne_One != 1 || true,当然与true的任何或者是true

+0

谢谢,我想我这样写的原因是因为我仍然不熟悉C++,因为java是我的第一语言。 – 2014-09-04 00:29:12

这个问题是由于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可能/应该改变或消除 - 使用布尔标志或中断/返回。

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++编译器来测试这个代码,但我认为这将与您

+0

这改变了代码的输出。 – user2864740 2014-09-04 03:12:22

+0

我刚编辑感谢 – 2014-09-04 08:47:59

作业编辑第一之后,如果()条件像有些人所指出的那样,我意识到我仍然无法循着第一条语句无限循环地遇到问题。我也意识到这是因为我没有写一行给用户输入另一个有效输入内容的机会(感觉这很好)。于是,我熟练地剪下并贴上了“cin >> choiceOne_One;”从while()循环外部变成 while()循环和瞧!它的工作。回想起来,我早该注意到了。