对社区和编程来说是新手。我很好奇为什么这两个逻辑语句在我的程序中是等效的。目前,我似乎无法将这种具体逻辑笼罩在脑子里,我想了解为什么它会如此工作。
最初,我写了以下内容:
char c;
do {
cin >> c;
cout << "You entered: " << c << "\n";
} while (c != 'Y' || c != 'y' || c != 'N' || c || 'n');
return 0;
}
但是,除非我使用&&,否则这似乎不起作用。后来,我发现使用或确实可以,但是我的否定必须在外面。这是使我感到困惑的两个条件。为什么它们在逻辑上等效?
while (!(c == 'Y' || c == 'y' || c == 'N' || c || 'n')); // Will run until c is the following
while (c !='Y' && c != 'y' && c != 'N' && c != 'n'); // Will also run but without being negated.
这些在do-while循环中的逻辑表达式
while (!(c == 'Y' || c == 'y' || c == 'N' || c || 'n')); // Will run until c is the following
while (c == 'Y' && c == 'y' && c == 'N' && c == 'n'); // Will also run but without being negated.
不相等。
表达式
while (!(c == 'Y' || c == 'y' || c == 'N' || c || 'n'));
相当于
while ( c != 'Y' && c != 'y' && c != 'N' && !c && !'n' );
请注意此do-while循环
char c;
do {
cin >> c;
cout << "You entered: " << c << "\n";
} while (c != 'Y' || c != 'y' || c != 'N' || c || 'n');
没有道理。例如,如果用户输入'N'
,则该循环继续其迭代,因为此子表达式c != 'Y'
表示为true。