我可能在寻找一些东西,但在C ++中有一种简单的方法可以将案例分组在一起而不是单独写出来吗?我记得基本上我可以做到:
SELECT CASE Answer
CASE 1, 2, 3, 4
C ++中的示例(对于那些需要它的人):
#include <iostream.h>
#include <stdio.h>
int main()
{
int Answer;
cout << "How many cars do you have?";
cin >> Answer;
switch (Answer)
{
case 1:
case 2:
case 3:
case 4:
cout << "You need more cars. ";
break;
case 5:
case 6:
case 7:
case 8:
cout << "Now you need a house. ";
break;
default:
cout << "What are you? A peace-loving hippie freak? ";
}
cout << "\nPress ENTER to continue... " << endl;
getchar();
return 0;
}
答案 0 :(得分:28)
AFAIK所能做的就是省略返回以使C ++中的内容更紧凑:
switch(Answer)
{
case 1: case 2: case 3: case 4:
cout << "You need more cars.";
break;
...
}
(当然,您也可以删除其他回报。)
答案 1 :(得分:15)
当然可以。
您可以使用案例x ... y作为范围
示例:
#include <iostream.h>
#include <stdio.h>
int main()
{
int Answer;
cout << "How many cars do you have?";
cin >> Answer;
switch (Answer)
{
case 1 ... 4:
cout << "You need more cars. ";
break;
case 5 ... 8:
cout << "Now you need a house. ";
break;
default:
cout << "What are you? A peace-loving hippie freak? ";
}
cout << "\nPress ENTER to continue... " << endl;
getchar();
return 0;
}
确保你有&#34; -std = c ++ 0x&#34;在编译器中启用了标志
答案 2 :(得分:12)
不,但您可以使用if
- else if
- else
链获得相同的结果:
if (answer >= 1 && answer <= 4)
cout << "You need more cars.";
else if (answer <= 8)
cout << "Now you need a house.";
else
cout << "What are you? A peace-loving hippie freak?";
您可能还想处理0辆汽车的情况,然后也可能通过抛出异常来处理负数车辆的意外情况。
PS:我已将Answer
重命名为answer
,因为用大写字母启动变量会被视为错误的样式。
作为旁注,像Python这样的脚本语言允许使用漂亮的if answer in [1, 2, 3, 4]
语法,这是实现所需内容的灵活方式。
答案 3 :(得分:5)
您无法删除关键字case
。但是你的例子可以写得更短:
switch ((Answer - 1) / 4)
{
case 0:
cout << "You need more cars.";
break;
case 1:
cout << "Now you need a house.";
break;
default:
cout << "What are you? A peace-loving hippie freak?";
}
答案 4 :(得分:3)
您的示例与switch
构造一样简洁。
答案 5 :(得分:1)
gcc有一个所谓的“案例范围”扩展名:
http://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Case-Ranges.html#Case-Ranges
当我只使用gcc时,我曾经使用过它。真的没什么好说的 - 它确实是你想要的,但只是价值范围。
这个问题的最大问题是只有gcc支持它;这对你来说可能是也可能不是问题。
(我怀疑,对于你的例子,if
语句会更自然。)
答案 6 :(得分:1)
您可以这样使用:
case 4: case 2:
{
//code ...
}
使用4或2个开关盒。
答案 7 :(得分:1)
如果您愿意采用预处理程序滥用方式,Boost.Preprocessor
可以为您提供帮助。
#include <boost/preprocessor/seq/for_each.hpp>
#define CASE_case(ign, ign2, n) case n:
#define CASES(seq) \
BOOST_PP_SEQ_FOR_EACH(CASE_case, ~, seq)
CASES((1)(3)(15)(13))
通过gcc
与-E -P
一起运行,只运行预处理器,CASES
的扩展为:
case 1: case 3: case 15: case 13:
请注意,这可能不会通过代码审查(不会在我工作的地方!)因此我建议将其限制为个人使用。
还应该可以创建一个CASE_RANGE(1,5)
宏来扩展到
case 1: case 2: case 3: case 4: case 5:
也适合你。
答案 8 :(得分:0)
不,除非您想要破坏兼容性和,否则您的编译器会支持它。
答案 9 :(得分:0)
#include <stdio.h>
int n = 2;
int main()
{
switch(n)
{
case 0: goto _4;break;
case 1: goto _4;break;
case 2: goto _4;break;
case 3: goto _4;break;
case 4:
_4:
printf("Funny and easy!\n");
break;
default:
printf("Search on StackOverflow!\n");
break;
}
}