gpt4 book ai didi

c++ - 为什么下面代码的输出是: DoSecond

转载 作者:行者123 更新时间:2023-11-30 19:55:59 24 4
gpt4 key购买 nike

#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;
}
}

有人可以解释一下上面的代码是如何工作的吗? switch怎么样跳转至case2标签?

最佳答案

检查man page对于 printf() 。其中提到

Return value

Upon successful return, these functions return the number of characters printed (excluding the null byte used to end output to strings).

这里,返回值是printf()调用用作 switch控制表达式值的语句。因此,在本例中,要打印字符串 "Do" ,它返回 2。这与 case 标签 2 匹配.

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

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

关于c++ - 为什么下面代码的输出是: DoSecond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44399410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com