[英]Why printf() in while() as a condition prints different output
#include<stdio.h>
int main()
{
while(printf("Hello"))
return 0;
}
仅产生Hello
作为 output
#include<stdio.h>
int main()
{
while(printf("Hello"));
return 0;
}
第二个代码无限次打印Hello
。
#include<stdio.h>
int main()
{
while(printf("Hello"))
{}
return 0;
}
第三个代码也无限次打印Hello
。
while
结束后有一个语句)
。
iteration-statement:
while ( expression ) statement
....
在
while(printf("Hello"))
return 0;
该语句(基本上是while
的参数)是return 0;
( 6.8.6 )
在
while(printf("Hello"));
声明是;
(一个空的(null)/表达式语句( 6.8.3 ))。
在
while(printf("Hello")){}
它是一个空的复合语句( {}
, 6.8.2 ),在语义上等同于;
.
您的代码片段是误导性空白的示例——空白使人类对事物的理解与编译器不同。
较少误导的渲染将是:
while(printf("Hello"))
return 0;
,
while(printf("Hello"))
; //or perhaps a {} instead of the null statement
和
while(printf("Hello"))
{}
printf
返回打印的字符数(即 5)。 任何非零数的计算结果为真。 所以循环是一个无限循环。
rest 取决于循环中发生的情况。 在第二种和第三种情况下,循环是空的(不包含语句),因此它们继续执行
在第一种情况下, return 0
在循环内执行。 Return 将控制流中断循环,导致循环(在这种情况下是程序)停止执行
在您的第一个代码段中, return 0;
语句是while
循环“主体”的一部分; 实际上,它是整个主体,因此,在第一次运行该循环时,程序退出(因为return 0;
在main
中执行时会退出)并且循环因此突然终止。
在第二个和第三个片段中,循环体为空,但这并不妨碍它运行,因为printf("Hello")
function 调用将返回 output 的字符数 - 这将是非零,因此被解释为“真”。
在第一个中, while
的主体是return 0
,因此它将在第一次迭代后返回。 同时与其他两个版本是相同的,有一个空的身体,所以他们无限地继续无所事事,但条件是不断评估将打印“你好”。
while(printf("Hello"))
return 0;
和
while(printf("Hello"))
{
return 0;
}
第一个代码:
printf("Hello")
返回字符数。
当在 while 循环中使用printf("Hello")
时,它将打印Hello
并返回 5。
由于它大于 0 while
循环认为这是真的,并执行 while 下面的语句,即return 0
。
return 0
使main
function 返回 0 并停止执行。
编码
while(printf("Hello"))
return 0;
和
while(printf("Hello"))
{
return 0;
}
第二个代码:
既然你用过;
while()
之后,不会执行后面的语句;
. 所以语句return 0
没有被执行, while
检查条件无限次打印无限Hello
。
第三个代码:
While 将仅在{ }
内执行语句。
由于每次搜索语句后它都是空的,它会返回 go 并检查条件。
由于条件始终为真,它不会达到return 0
,它将无限次打印Hello
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.