C++ 在switch语句中共享大小写。表达问题。它是如何工作的?

C++ 在switch语句中共享大小写。表达问题。它是如何工作的?,c++,switch-statement,expression,C++,Switch Statement,Expression,在我正在研究的一个例子中,我有代码来识别'a'到'z'之间的元音。使用switch语句时,字符值共享相同的大小写,而不是单独的大小写。据我目前所知,这个表达涉及 ***(letter * (letter >= 'a' && letter <= 'z'))*** 计算结果为true或false,并转换为整数1和0,在该整数中,它属于情况0:0。如果结果为false,则显然为false来处理结果。有人能解释这个语句涉及的转换过程的表达式吗?尤其是逻辑表达式乘法背后的推

在我正在研究的一个例子中,我有代码来识别'a'到'z'之间的元音。使用switch语句时,字符值共享相同的大小写,而不是单独的大小写。据我目前所知,这个表达涉及

***(letter * (letter >= 'a' && letter <= 'z'))*** 
计算结果为true或false,并转换为整数1和0,在该整数中,它属于情况0:0。如果结果为false,则显然为false来处理结果。有人能解释这个语句涉及的转换过程的表达式吗?尤其是逻辑表达式乘法背后的推理。下面是我的示例代码:

char letter(0); 
cout << endl
     << "Enter a small letter: ";
 cin >> letter;

switch(letter * (letter >= 'a' && letter <= 'z'))
{
case 'a': case 'e': case 'i': case 'o': case 'u':
    cout << endl << "You entered a vowel.";
    break;

case 0:
        cout << endl << "That is not a small letter.";
        break;

    default: cout << endl << "You entered a consonant.";
}
编辑:所有伟大的答案,伙计们。清理了很多。再次感谢您的投入

任何乘以0的值都是0,这意味着如果没有相应的case,控件将转到默认case,这一个转到case:0部分。否则,字母*1是字母,因此它将被其他情况比较,就像它是开关字母一样

任何乘以0的值都是0,这意味着如果没有相应的case,控件将转到默认case,这一个转到case:0部分。否则,字母*1是字母,因此它将被其他情况比较,就好像它是开关字母一样。

字母>='a'&&letter字母>='a'&&letter 在此阶段,字母*1返回字母,字母*0返回0。这解释了案例陈述的工作原理

正是出于同样的原因,导致了这里缺乏可读性,我将首先将其拆分为if,检查小写字母,然后再传递到开关

在此阶段,字母*1返回字母,字母*0返回0。这解释了案例陈述的工作原理


正是出于同样的原因,导致您在这里缺乏可读性,我会将其拆分为一个if,首先检查小写字母,然后再传递到开关。

其他人对此进行了解释。不过,不管是谁编的,都应该被带出来枪毙。@HotLicks哈哈,每个人都给出了很好的答案。只是想决定接受谁的答案。编写代码的人是Ivor Horton。到目前为止,我还从未见过这样使用switch语句。其他人对此进行了解释。不过,不管是谁编的,都应该被带出来枪毙。@HotLicks哈哈,每个人都给出了很好的答案。只是想决定接受谁的答案。编写代码的人是Ivor Horton。到目前为止,我还从未见过这样使用switch语句。
letter * (letter >= 'a' && letter <= 'z')
letter * (0)
letter * (1)
(letter * (letter >= 'a' && letter <= 'z'))
(letter >= 'a' && letter <= 'z')
(letter * <1/0>)