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

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

img

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

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: 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!"。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

default下面再写case,你要哪样,它不会被匹配,而且break没有break,相当于去掉 case 'c':,default直接写2行