将switch语句案例分组在一起? 我可能是在寻找什么,但是C++中有一种简单的方法来将案例分组在一起而不是单独写出来吗?我记得在basic中,我可以做到: SELECT CASE Answer CASE 1, 2, 3, 4 < C++ >(对于需要的): #包括 #包括 int main() { int答案; 回答; 开关(应答) { 案例1: 案例2: 案例3: 案例4: cout

将switch语句案例分组在一起? 我可能是在寻找什么,但是C++中有一种简单的方法来将案例分组在一起而不是单独写出来吗?我记得在basic中,我可以做到: SELECT CASE Answer CASE 1, 2, 3, 4 < C++ >(对于需要的): #包括 #包括 int main() { int答案; 回答; 开关(应答) { 案例1: 案例2: 案例3: 案例4: cout,c++,switch-statement,C++,Switch Statement,您的示例与使用开关构造得到的示例一样简洁。否,但您可以使用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-

您的示例与使用
开关
构造得到的示例一样简洁。

否,但您可以使用
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?";

if(answer>=1&&answerAFAIK您所能做的就是省略返回,以使C++中的内容更加紧凑:

switch(Answer)
{
    case 1: case 2: case 3: case 4:
        cout << "You need more cars.";
        break;
    ...
}
开关(应答)
{
案例1:案例2:案例3:案例4:

不能不可以,除非您想破坏兼容性,并且您的编译器支持它。

您不能删除关键字
大小写
。但是您的示例可以写得更短,如下所示:

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?";
}
case 4: case 2:
 {
   //code ...
 }
开关((答案-1)/4)
{
案例0:
coutgcc有一个所谓的“案例范围”扩展:

当我只使用gcc的时候,我就用过它。其实没什么好说的——它做了一些你想要的事情,尽管只适用于值的范围

最大的问题是只有gcc支持它;这对您来说可能是问题,也可能不是问题

(我想对于你的例子来说,
if
语句更适合你。)

你可以这样使用:

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?";
}
case 4: case 2:
 {
   //code ...
 }

用于4或2开关箱。

如果您愿意走预处理器滥用的道路,可以帮助您

    #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))
请注意,这可能不会通过代码审查(在我工作的地方不会!),因此我建议将其限制为个人使用

还可以创建一个
CASE\u范围(1,5)
宏来展开

    case 1: case 2: case 3: case 4: case 5:
您也可以。

当然可以

您可以对范围使用案例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;
}
#包括
#包括
int main()
{
int答案;
回答;
开关(应答)
{
案例1…4:
不能包含
int n=2;
int main()
{
开关(n)
{
案例0:转到4;中断;
案例1:goto_4;中断;
案例2:goto_4;中断;
案例3:goto_4;中断;
案例4:
_4:
printf(“有趣且简单!\n”);
打破
违约:
printf(“在StackOverflow上搜索!\n”);
打破
}
}

嗯,我想你回答了你自己的问题……对于你提供的特定示例,如果(回答>=1 & &回答:“法拉利不,他想要一个更紧凑的形式,例如<代码> 1, 2, 3,4:< /Cord>”我意识到我做的是正确的。我只是在使用我的资源来找到最好的做事方法。作为C++的冗余,我希望有一种更好的方法来分组输出,然后输入400次,只到组输出。GCC现在将报告。
Wimplicit fallthrough
如果您执行
case1:case2:
等操作,那么最好有一种优雅的跨平台方式来处理此问题,而不必禁用编译器警告。您需要在
case
和数字之间留出空格,不是吗?@marcog,是的!修复了它,ta注意到了。实际上我喜欢这个想法。谢谢!它是really是仍然使用switch语句且不必定义每种情况的唯一方法。此代码试图变得聪明。通常这不是一件好事。但答案是:-)注意,越短并不总是越好。如果我们沿着这条路走下去,如何定义案例1234案例1:案例2:案例3:案例4:关系运算符不能在switch语句中使用真糟糕…:-\@Josh你为什么如此依赖switch语句?如果它们不能提供你需要的,请使用更合适的替代方法。什么都没有真的。我刚刚读了一篇关于分支语句的文章,注意到他们在这些问题上花了很多时间,我出于某种原因,认为还有其他方法来分组它们。我真的只在开始编程时只用了开关语句。注意这是GNU扩展,而不是标准C++ 11。
#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;
     }
}