不同的时候循环是或否条件

时间:2014-03-03 13:09:38

标签: c++ while-loop

这令人沮丧,看起来我希望循环只有在用户输入“N”或“n”时才会中断。

#include <iostream>

int main()
{
char abc;
std::cin >> abc;

while (abc != 'N' || abc != 'n')
{
      std::cout << "hello world\n";
      std::cin >> abc;
}
system("pause");   
return 0;
}

这些工作:

while(abc == 'Y' || abc == 'y')
while(abc == 'N')

但为什么?

4 个答案:

答案 0 :(得分:9)

更改

while (abc != 'N' || abc != 'n')

while (abc != 'N' && abc != 'n')

,因为 (abc != 'N' || abc != 'n')始终为TRUE。

答案 1 :(得分:2)

只需更改“||”到“&amp;&amp;”这将有效。

while (abc != 'N' && abc != 'n').

答案 2 :(得分:1)

De Morgan's Law的申请将为您提供帮助:

!(abc == 'N' || abc == 'n')(abc != 'N' && abc != 'n')相同。

你编写它的方式会导致程序循环:(abc != 'N' || abc != 'n')相当于!(abc == 'N' && abc == 'n'),当然是!(false)

答案 3 :(得分:0)

否定表达

(abc == 'Y' || abc == 'y')

可以写成

!(abc == 'Y' || abc == 'y')

并重写为

( !( abc == 'Y' ) && !(abc == 'y' ) )

最后作为

( ( abc != 'Y' ) && (abc != 'y' ) )

或只是

( abc != 'Y' && abc != 'y' )

所以循环的控制语句应该看起来像

while (abc != 'N' && abc != 'n')

此外,从逻辑上讲,将其替换为do-while循环会更好。例如

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
   char abc;

   do
   {
      std::cout << "hello world\n";
      std::cin >> abc;
   } while ( abc != 'N' && abc != 'n' );

   system("pause");   

   return 0;
}