C++ 下面代码的输出是如何产生的:DoSecond #包括 int main() { 开关(printf(“Do”)) { 案例1: printf(“第一次”); 打破 案例2: printf(“第二次”); 打破 违约: printf(“默认值”); 打破 } }

C++ 下面代码的输出是如何产生的:DoSecond #包括 int main() { 开关(printf(“Do”)) { 案例1: printf(“第一次”); 打破 案例2: printf(“第二次”); 打破 违约: printf(“默认值”); 打破 } },c++,c,switch-statement,printf,C++,C,Switch Statement,Printf,有人能解释一下上面的代码是如何工作的吗?开关如何跳转到case2标签?检查是否有printf()。它提到 返回值 成功返回后,这些函数返回打印的字符数(不包括用于结束字符串输出的空字节) 这里,printf()调用的返回值用作控制表达式值的开关语句。因此,在本例中,对于打印字符串“Do”,它返回2。这与案例标签2匹配 然后,对标准输出进行行缓冲。在第一次printf()之后没有刷新指令或newline,因此下一次printf()调用的连续输出与输出缓冲区并列,最后在满足newline后,它一起刷

有人能解释一下上面的代码是如何工作的吗?
开关如何跳转到
case2
标签?

检查是否有
printf()
。它提到

返回值 成功返回后,这些函数返回打印的字符数(不包括用于结束字符串输出的空字节)

这里,
printf()
调用的返回值用作控制表达式值的
开关
语句。因此,在本例中,对于打印字符串“Do”
,它返回2。这与案例标签
2
匹配

然后,对标准输出进行行缓冲。在第一次
printf()
之后没有刷新指令或
newline
,因此下一次
printf()
调用的连续输出与输出缓冲区并列,最后在满足
newline
后,它一起刷新到控制台/终端,显示
“DoSecond”

也就是说,
int main()
至少应该是
int main(void)
,以符合托管环境的标准。

的返回值为

如果成功,写入的字符数;如果发生错误,写入的字符数为负值

因此
“Do”
有2个字符,因此开关进入
案例2:

#include <stdio.h>
    int main()
    {
        switch (printf("Do"))
        {
        case 1:
            printf("First\n");
            break;
        case 2:
            printf("Second\n");
            break;
        default:
            printf("Default\n");
            break;
        }
    }