在switch和if语句的条件判断中,为什么不能使用这样的判断语句?

在switch和if语句的条件判断中,为什么不能使用这样的判断语句?

问题描述:

(我是大一新生,还请多多包涵。叩谢各位)
(并不是为了完成homework,是个人疑问,已经问过teacher,但是没有给我明确的回答,所以来问问看)
在日常敲代码中,我遇到了一个问题:先是在switch语句中,switch语句的判断条件只能是一个常量,我写了如下的代码

#include <iostream>

using namespace std;

int main()
{ char A;
   cout<<"请输入一个字母";
   cin>>A;
   switch(A)
    {case 'a'||'u'||'O'||'i'||'e' :cout<<"原音"<<endl;break;
    case  'q'||'w'||'r'||'t'||'y'||'p'||'s'||'d'||'f'||'g'||'h'||'j'||'k'||'l'||'z'||'x'||'c'||'v'||'b'||'n'||'m' :cout<<"辅音"<<endl;break;
    default :cout<<"不是英文字母" ;break;


    }

    return 0;


    }


但是并不能跑起来(我觉得用单引号引用后就是常量了)
我又换用了if语句,但是仍然不能正常运行,非常疑惑。
我个人感觉是不是因为用逻辑运算符后,前两个判断后变为1,再与后边的继续进行逻辑判断,如果是这样,那应该最终可以输出一个数字,但是也不能输出一个数字,就很疑惑。

case不可以用逻辑运算符

应该是这样

#include <iostream>
using namespace std;
int main()
{
    char A;
    cout << "请输入一个字母";
    cin >> A;
    switch(A)
    {
        case 'a':
        case 'u':
        case 'o':
        case 'i':
        case 'e':
            cout << "原音" << endl;
            break;
        case 'q':
        case 'w':
        case 'r':
        case 't':
        case 'y':
        case 'p':
        case 's':
        case 'd':
        case 'f':
        case 'g':
        case 'h':
        case 'j':
        case 'k':
        case 'l':
        case 'z':
        case 'x':
        case 'c':
        case 'v':
        case 'b':
        case 'n':
        case 'm':
            cout << "辅音" << endl;
            break;
        default :
            cout << "不是英文字母";
            break;
    }
    return 0;
}

这样会感觉很麻烦,还不如用if

switch可以,但case不可以
必须:
case 'a':
case 'u':
case 'o':
case 'i':
case 'e':
cout<<"原音"<<endl;
break;