[英]Print statement in if, switch and while condition of c
有人可以解释为什么代码打印 "HelloWorld" 而不是 "HelloWorldThere" 吗? 另外,为什么它会打印任何内容,因为 if 或 switch 语句中没有条件? 这是代码:
#include <stdio.h>
int main()
{
int a, b;
if(printf("Hello"))
switch(printf("World"))
while(printf("There"))
{
return 0;
}
}
非常简单: printf("Hello")
返回 5(写入的字符数)。 5 不是 0,所以就 if 而言,它被认为是“真”,所以printf("World")
也返回 5,开关查找case 5:
,没有找到,然后停在那里。
首先,让我们考虑函数printf
返回的内容。 来自 C 标准
3
printf
函数返回传输的字符数,如果发生输出或编码错误,则返回负值。
所以这个if
语句的条件
if(printf("Hello"))
计算结果为真,因为printf()
返回一个非零值。
然后这个switch
语句
switch(printf("World"))
被评估。
现在让我们考虑一下switch
语句是如何工作的。 来自 C 标准
4
switch
语句导致控制跳转到、进入或跳过作为 switch 主体的语句,这取决于控制表达式的值,以及默认标签的存在和任何 case 标签的值。切换身体。 case 或 default 标签只能在最接近的封闭 switch 语句中访问。
由于switch
语句的主体语句没有标签(包括默认标签),因此控制通过主体语句。 即while
语句(即switch
语句的主体语句)不执行。
如果您想获得预期的结果,例如插入标签default
。
#include <stdio.h>
int main()
{
if(printf("Hello"))
switch(printf("World"))
default: while(printf("There"))
{
return 0;
}
}
在这种情况下,程序输出是
HelloWorldThere
或者使用空语句作为 switch 语句的主体语句。
#include <stdio.h>
int main()
{
if(printf("Hello"))
switch(printf("World")); // <==
while(printf("There"))
{
return 0;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.