【问题标题】:what is the difference between using the same value for two case labels and using several case labels for a single case?对两个案例标签使用相同的值和对一个案例使用多个案例标签有什么区别?
【发布时间】:2019-08-15 10:45:40
【问题描述】:

我正在阅读 Bjarne 的 Programming and Principles using C++

我遇到了以下关于 switch 的详细信息:

您可以为一个案例使用多个案例标签。

您不能对两个案例标签使用相同的值。

我想我清楚地理解了 2. 一。应该是这样的:

switch (a) {

  case 'c':{//some code} 

  case 'c':{//some (different) code} 
} 

合法。

但是,我不确定第一个是否意味着,如果案例 1 和案例 2 等不同,那么我可以有任意数量的案例(当然它们是常量表达式)或者它意味着我可以处理任意数量的案例,但其中一些案例做同样的事情

我发现了一个类似的问题: multiple label value in C switch case

我的解释正确吗?如果没有,我错过了什么或弄错了什么?

【问题讨论】:

  • “你不能对两个大小写标签使用相同的值。”实际上有什么不清楚的地方?
  • 我相信有问题的书会给出第一个含义的基本示例。
  • 两个案例标签不能相同。见example
  • 是的,您链接的问题包含“单个案例的多个案例标签”的示例。措辞(案例/案例标签)有点令人困惑,但它本质上是在告诉您“您不必在每个 case 之后放置已执行的代码,如果它们应该做同样的事情,您可以将它们组合在一起”跨度>
  • 这就像把多人放在一个房间里,而不是把一个人放在多个房间里。

标签: c++ switch-statement label case


【解决方案1】:

这是允许的:

switch ( expression )
{
    case 1:
    case 2: 
    case 3:
          //some code
          break;
    //...
}

这是不允许允许的:

switch ( expression )
{
    case 1:
          //some code
          break;
    case 1:
          //some other code
          break;
    //...
}

【讨论】:

    【解决方案2】:

    他的意思好像是下面的结构

    switch ( expression )
    {
        case 1: case 2: case 3:
           //some code
           break;
        //...
    }
    

    【讨论】:

      【解决方案3】:

      您可以为一个案例使用多个案例标签。

      这只是意味着在任何情况下您都可以使用尽可能多的标签。

      例如,

      switch(choice) {
          // This is valid
          case 1:
          case 2:
              .
              .
          case n:
              printf("\nCase 1 and 2");
              break;
      }
      

      您可能想知道为同一案例使用多个标签有什么用?

      考虑一个询问用户他/她的科目成绩的例子。用户可以输入等级为Aa用于A级,Bb用于B级等。但是您想处理忽略用户输入是大写还是小写的情况。你可以这样做:

      char choice;
      printf("Enter your grades : ");
      scanf("%d", &choice);
      
      switch(choice) {
          case 'A':
          case 'a':
              printf("Excellent");
              break;
      
          case 'B':
          case 'b':
              printf("Good");
              break;
              .
              .
          case 'E':
          case 'e':
              printf("You failed");
              break;
      
          default:
              printf("Invalid grades");
      }
      

      【讨论】:

      • printf("%d", &choice);?你的意思是scanf(),也许?
      【解决方案4】:

      我认为在一个语句中可以有多个标签(实际上是大小写标签或常规标签),或者换句话说,您可以使用隐式失败,这是一种措辞不当的方式。

      例子:

      bool a_or_b_eh(char Ch)
      {
          switch(Ch){ //return true; is a single statement so the {} are optional here
              case 'a': case 'b': case 'A': case 'B': return true;
          }
          return false;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-13
        • 2016-10-09
        • 2019-07-29
        • 2015-11-11
        • 2021-12-15
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        相关资源
        最近更新 更多