实践and真知 2023-04-24 22:23 采纳率: 82.4%
浏览 16
已结题

求解答,我有的迷惑default的使用了

那这个答案应该是4,2为啥和下面的不一样

img

这个default是无条件执行的吧?按道理上面那个应该也是这样吧。

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-26 14:23
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7803414
    • 除此之外, 这篇博客: 分支和循环语句中的 3.default语句的使用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      当表达式的值与每一个case语句都不匹配时,你也想执行一些代码处理数据时,就可以加上default语句

      default:

      (1)每个switch语句中只能出现一条default子句。

      (2)default语句可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

      下面做一个小练习:

      #include <stdio.h>
      int main()
      {
          int n = 1;
          int m = 2;
          switch (n)
          {
          case 1:
                  m++;
          case 2:
                  n++;
          case 3:
                  switch (n)
                 {//switch允许嵌套使用
                   case 1:
                          n++;
                   case 2:
                          m++;
                          n++;
                          break;
                 }
          case 4:
                  m++;
                  break;
          default:
                  break;
          }
          printf("m = %d, n = %d\n", m, n);
          return 0; 
      }

      输出:m = 5,n = 3

      分析:

      #include <stdio.h>
      int main()
      {
          int n = 1;
          int m = 2;
          switch (n)//此时n为1
          {
          case 1://进入
                  m++;//m变为3
          case 2://继续
                  n++;//n变为2
          case 3://继续
                  switch (n)//此时n为2
                 {//switch允许嵌套使用
                   case 1:
                          n++;
                   case 2://进入
                          m++;//m变为4
                          n++;//n变为3
                          break;//跳出case 3:的嵌套switch
                 }
          case 4://继续
                  m++;//m变为5
                  break;//跳出外部switch
          default:
                  break;
          }
          printf("m = %d, n = %d\n", m, n);//m = 5,n = 3
          return 0; 
      }
      //输出:m = 5,n = 3
    • 您还可以看一下 陈槐老师的软件测试全栈系列课程课程中的 设置字段的默认值 DEFAULT小节, 巩固相关知识点
    • 以下回答来自chatgpt:

      default所代表的意思是当switch的参数不论任何case匹配时,进行default执行,因为default本质上仍然是一种case。如果仅仅只是是为了判断是否进入default,而并不需要做其他处理,可以将default供认标记为“未使用”以去除编译器检测时的warning。下面是一个示例代码:

          int num = 10;
          switch(num) {
              case 1:
                  cout << "1" << endl;
                  break;
              case 2:
                  cout << "2" << endl;
                  break;
              default:
      #pragma clang diagnostic push
      #pragma clang diagnostic ignored "-Wunused-label"
                  unused_label:
      #pragma clang diagnostic pop
                  break;
          }
      

      在这里,我们利用了忽略警告的预处理指令#pragma clang diagnostic,将default的标签设置为未使用,从而绕过编译器的检测并避免产生warning。需要注意的是,忽略警告并不等于忽略编译错误,在编译时仍然会产生其他的错误提示。

      另外可以看到,default与case等效,它可以放在语句列表的任何位置并且语句流会像执行一个case标签一样执行default子句,一般来说我们需要将default放在所有的case语句的最后面。下面是一个示例代码:

          int num = 10;
          switch(num) {
              case 1:
                  cout << "1" << endl;
                  break;
              case 2:
                  cout << "2" << endl;
                  break;
              default:
                  cout << "default" << endl;
                  break;
          }
      

      上面的代码会依次匹配1和2,由于num的值10并不在这两个范围内,最后会执行default,并输出"default"。

      在考虑default时需要注意default的位置,如果default在某一个case之前,那么在对应的case语句中如果不写break,有可能会误触default标签,导致程序执行到错误的位置。因此,一般建议将default放在所有case语句的最后面,可以避免一些潜在的错误。下面是一个示例代码:

          int num = 1;
          switch(num) {
              case 1:
                  cout << "Hello, ";
              default:
                  cout << "world!" << endl;
                  break;
              case 2:
                  cout << "Goodbye!" << endl;
                  break;
          }
      

      这个示例代码的本意是要输出"Hello, world!",但是由于default在case 2的前面,程序会误触default标签并执行到错误的位置,导致输出结果为"world!"。为了避免这种情况的发生,我们需要将default放到所有case语句的最后面,下面是修改后的代码:

          int num = 1;
          switch(num) {
              case 1:
                  cout << "Hello, ";
                  break;
              case 2:
                  cout << "Goodbye!" << endl;
                  break;
              default:
                  cout << "world!" << endl;
                  break;
          }
      

      再次运行程序,可以看到顺利地输出了"Hello, world!"。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月8日
  • 已采纳回答 4月30日
  • 创建了问题 4月24日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)