【问题标题】:Please explain why the loop is executing for 11 times请解释为什么循环执行了 11 次
【发布时间】:2020-10-08 00:11:04
【问题描述】:
#include<stdio.h>
    
int main() {
    int loop=10;
    while(printf("Hello ") && loop--);
    return 0;
}

【问题讨论】:

  • 。只需将行 while(printf("Hello ") &amp;&amp; loop--); 更改为 while(printf("Hello ") &amp;&amp; loop--) { printf(" %d", loop);} 即可查看发生了什么

标签: c printf logical-operators


【解决方案1】:

循环实际上只执行了 10 次 -- test 执行了 11 次。由于循环体本身是空的(printf 是测试的一部分),您不会注意到它只执行了 10 次。

top-checked 循环的本质是,对于 n 次迭代的循环,测试将被评估 n+1 次——它在循环执行之前被评估(因此它可能执行零次),之后每次执行。

【讨论】:

  • 你可以试试 --loop 而不是 loop-- 让它循环 10 次。
【解决方案2】:

while() 的开始部分取决于循环值的值。如果它从 10 开始,每个while() 递减 1,那么它将循环 11 次到达loop==0

一切都很好,直到循环 == -1,它变成了错误。

while() 函数可以像 while(loop &gt; -1, then true)...otherwise false 一样读取。

【讨论】:

  • 这个答案充其量是令人困惑的。当loop==0(不是loop==-1)时,条件评估为假,即使它之后会递减(并且在循环之后为-1)。
【解决方案3】:

解释为什么循环执行了 11 次

while 循环体执行了 10 次。

int main() {
    int loop=10;
    while(printf("Hello ") && loop--){
      printf("Body\n");
    }
    return 0;
}

测试条件printf("Hello ") &amp;&amp; loop-- 执行了11次。上次是假的。

【讨论】:

    【解决方案4】:

    正如其他人所指出的,printf() 语句位于 while 条件 内。当loop == 0时,条件还得执行,看到(printf() &amp;&amp; loop--)的结果为假,此时while循环终止。

    此外,对逻辑条件进行评估,直到它们确定为true 或确定为false。当任一操作数为false 时,逻辑与运算绝对可以为false。如果要交换操作数的位置,则只打印“Hello” 10 次而不是 11 次。

    int loop = 10;
    while (loop-- && printf("Hello "));
    

    loop-- 将在到达 printf("Hello ") 语句之前评估为 false loop == 0

    【讨论】:

      【解决方案5】:
      int main() {
      int loop=10;
      while(printf("Hello ") && loop--){
      printf("Body\n");
      }
      return 0;
      }
      

      由于 while 条件与 printf() 语句相关联,因此循环执行了 10 次,在执行第 11 次迭代期间,认为条件为假, printf("Hello") 又执行了一次。

      但是,很明显,while 循环只执行了 10 次。

      感谢所有回答问题的人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 2022-01-24
        • 2015-05-16
        • 1970-01-01
        • 2013-10-31
        相关资源
        最近更新 更多