问题描述
#include<stdio.h>
int main() {
int loop=10;
while(printf("Hello ") && loop--);
return 0;
}
解决方法
该循环实际上仅执行10次- test 执行11次。由于循环主体本身为空(printf是测试的一部分),因此您不会注意到它仅执行10次。
top-checked循环的本质是,对于n次迭代的循环,将对测试进行n + 1次评估-在循环执行之前(因此它可能执行零次)以及之后进行评估。每次执行。
, while()
的开头部分取决于循环值的值。如果从10开始并且每个while()
递减1,则它将循环11次以达到loop==0
。
一切都好,直到循环== -1,这变成了错误。
while()
函数的读取方式类似于while(loop > -1,then true)...otherwise false
。
解释为什么循环执行11次
while
循环主体执行了10次。
int main() {
int loop=10;
while(printf("Hello ") && loop--){
printf("Body\n");
}
return 0;
}
测试条件printf("Hello ") && loop--
执行了11次。上次是虚假的。
正如其他人指出的那样,printf()语句位于while 条件中。当loop == 0
时,条件仍然必须执行,并且看到(printf() && loop--)
的结果为false,在这种情况下,while循环终止。
此外,对逻辑条件进行评估,直到它们明确为true
或明确为false
为止。当逻辑“与”操作的任何一个操作数为false
时,绝对可以为false
。如果要交换操作数的位置,则只将“ Hello”打印10次而不是11次。
int loop = 10;
while (loop-- && printf("Hello "));
loop--
在false
到达printf("Hello ")
语句之前将评估为loop == 0
。
int main() {
int loop=10;
while(printf("Hello ") && loop--){
printf("Body\n");
}
return 0;
}
由于while条件与printf()语句相关联,因此循环执行了10次,并且在执行第11次迭代期间,以为条件为假,printf(“ Hello”)会再执行一次。
但是,很明显,while循环仅执行了10次。
感谢所有回答此问题的人。