这令人沮丧,看起来我希望循环只有在用户输入“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')
但为什么?
答案 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;
}