C++ 为什么我的或操作员不能按预期工作?(C+;+;)

C++ 为什么我的或操作员不能按预期工作?(C+;+;),c++,operators,C++,Operators,无论输入如何,我的if语句都会被命中。我不明白为什么。代码如下: void Novice::selection() { char selection, shift; cout << "Please select a section to run: A - Home Row, B - Bottom Row, C - Top Row, D - Pointer Fingers, E - Right Pinky;" << endl; cin >>

无论输入如何,我的if语句都会被命中。我不明白为什么。代码如下:

void Novice::selection()
{
    char selection, shift;
    cout << "Please select a section to run: A - Home Row, B - Bottom Row, C - Top Row, D - Pointer Fingers, E - Right Pinky;" << endl;
    cin >> selection; 
    selection = toupper(selection);
    if (selection != 'A' || 'B' || 'C' || 'D' || 'E') {
        cout << "Invalid Input.  Please select again" << endl;
        cin >> selection; 
    }
    if (selection == 'A' || 'B' || 'C') {
        cout << "you're here" << endl;
    }
void新手::selection()
{
字符选择、移位;
cout选择;
选择=toupper(选择);
如果(选择!=“A”| |“B”| |“C”| |“D”| |“E”){
cout选择;
}
如果(选择==“A”| |“B”| |“C”){

CUT

这不是逻辑运算符在C++中的工作方式。要与多个值进行比较,您需要做:

 if (selection == 'A' || selection == 'B' || selection == 'C') {
   // ...
}
请注意,即使使用了上述修复程序,您的第一个
if
也不正确。如果您检查一个值是否不等于其他几个值,这将始终为真。该条件可能需要类似于:

if (selection != 'A' && selection != 'B' && 
    selection != 'C' && selection !=  'D' && selection != 'E') {
  // ...
}
或者,对于第一个
if
条件,您可以使用
switch
语句,如下所示:

switch ( selection )
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
    break;
default:
    cout << "Invalid Input.  Please select again" << endl;
    cin >> selection;
}
开关(选择)
{
案例“A”:
案例“B”:
案例“C”:
案例“D”:
案例“E”:
打破
违约:
cout选择;
}

> > P>这不是逻辑运算符在C++中的工作方式。要与多个值进行比较,您需要做:

 if (selection == 'A' || selection == 'B' || selection == 'C') {
   // ...
}
请注意,即使使用了上述修复程序,您的第一个
if
也不正确。如果您检查一个值是否不等于其他几个值,这将始终为真。该条件可能需要类似于:

if (selection != 'A' && selection != 'B' && 
    selection != 'C' && selection !=  'D' && selection != 'E') {
  // ...
}
或者,对于第一个
if
条件,您可以使用
switch
语句,如下所示:

switch ( selection )
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
    break;
default:
    cout << "Invalid Input.  Please select again" << endl;
    cin >> selection;
}
开关(选择)
{
案例“A”:
案例“B”:
案例“C”:
案例“D”:
案例“E”:
打破
违约:
cout选择;
}

告诉我
|
运算符的作用。表达式
'B'
计算结果为字符代码66(假设使用ASCII),它是非零的,所以它是真的。
|
运算的结果是真的,如果任何一个操作数为真。这意味着您的if条件将始终为真。告诉我
|
运算符的作用。表达式
'B'
计算结果为字符代码66(假设使用ASCII),它是非零的,所以它是真的。
|
操作的结果是真的,如果任何一个操作数都是真的。这意味着你的if条件将始终是真的。或者简单地使用
switch
语句。@AndreasWenzel不确定
switch
对于OP的示例来说实际上更好。不过,对于纠正这一点不是很有用:
>如果(选择!=“A”| |“B”| |“C”| |“D”| |“E”)
(需要使用
&&
)“确实,增加了一个解释。不用担心,乐意帮助:”在你可以的时候考虑这个问题。同时,你可以得到一个徽章:)或者简单地使用<代码>开关语句。@ AndreasWenzel Not确信一个“代码>开关实际上对OP的例子来说是更好的。但是,对于纠正这一点来说不是很有用。(选择!=‘a’′‘b’′‘c’′‘d’′′’e’)< /代码>(需要使用代码>和< /代码>)。