#include <iostream>
using namespace std;
int main(){
char i;
cin >>i;
switch (i){
case ('e'||'i'||'o'||'u'||'a'):
cout<<"Vowel";
break;
case ('+'||'-'||'/'||'*'||'%'):
cout<<"Op";
break;
}
return 0;
}
如果不是我们如何在交换机中使用比较或逻辑运算符? &安培;为什么我们不能在不使用范围的情况下在单例中声明和初始化变量?
答案 0 :(得分:7)
如果没有中断声明,之前的案例会“失败”,这样就可以实现您所寻找的||
:
#include <iostream>
using namespace std;
int main(){
char i;
cin >>i;
switch (i){
case 'e':
case 'i':
case 'o':
case 'u':
case 'a':
cout<<"Vowel";
break;
case '+':
case '-':
case '/':
case '*':
case '%':
cout<<"Op";
break;
}
return 0;
}
答案 1 :(得分:2)
答案 2 :(得分:2)
switch
中,您只能隐式使用==
运算符,而只能使用整数和枚举类型(第6.4.2节)。您应该将switch
重写为
switch (i){
case 'e':
case 'i':
case 'o':
case 'u':
case 'a':
cout<<"Vowel";
break;
case '+':
case '-':
case '/':
case '*':
case '%':
cout<<"Op";
break;
}
利用了switch
语句的直通功能。
如果不是我们如何在switch中使用比较或逻辑运算符?
简单地说,你不能。如果你想做与积分/枚举类型的相等比较不同的事情,你必须写几个if
/ else
语句。
&安培;为什么我们不能在不使用范围的情况下在单例中声明和初始化变量?
这不是声明的问题,而是初始化的问题;请参阅@ awoodland的答案中的链接。
答案 3 :(得分:1)
将其格式化为:
switch (i)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
cout << "Vowel";
break;
}
答案 4 :(得分:0)
替代方案,更简洁的解决方案:
#include <cstring>
// ...
if (strchr("eioua", i)) cout << "vowel";
if (strchr("+-/*%", i)) cout << "operator";
请注意,strchr
会考虑字符串的终止零部分,因此i
不应为0.
答案 5 :(得分:0)
我们可以,除了它并不意味着什么(并在两种情况下产生相同的值):你将对一堆非零整数值执行逻辑或在这两种情况下结果都是 true 。