繁体   English   中英

c 的 if、switch 和 while 条件中的打印语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM