请说明为什么循环执行11次

问题描述

#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次。

感谢所有回答此问题的人。