检查 count-- 在 for 循环中会取消循环吗?

Does checking count-- in a for loop cancels the loop?

对不起,我是 C 语言的新手。 谁能帮我理解 "for" 循环中发生的事情:

当我 运行 这段代码时,我什么也没得到,它甚至没有进入循环:

for( count=0   ;count--;count--)
{   
    printf("\n%5d", count);
}

当我 运行 这段代码时,我得到了循环的无限入口:

for( count=1   ;count--;count--)
{   
    printf("\n%5d", count);
}

当我 运行 这段代码时,我得到了 1 个循环入口:

for( count=2  ;count--;count--)
{   
    printf("\n%5d", count);
}

以此类推,对于每个计数=奇数,我得到无限个入口,对于每个计数=偶数,我得到一个有限的入口入口数量

谁能解释一下为什么会这样?

我认为您首先需要确切地知道 count-- 是什么。这意味着首先 count 将作为条件的一部分进行评估,然后递减。这意味着 count-- 在这种情况下是 0,使 for 循环条件的计算结果为 0。评估条件后,count-1,但这无关紧要,因为在条件检查期间计数为 0,因此循环永远不会运行。

for(count = 0;count--;count--)
{   
    printf("\n%5d", count);
}

下一个循环从1开始计数,这意味着count--将被计算为1,这使得for循环的条件检查等于1 .求值后count变为0。这意味着 for 循环将进入并打印出消息。当代码块结束时,语句 count-- 被执行,将 count 设置为 -1。然后我们再次检查。我们看到 count-- 的计算结果为 -1 所以我们将再次循环。求值后,count会被设置为-2,再次进入for循环。 这个函数永远运行,因为当我们进行 for 循环检查时,count 总是奇数,因此 count 永远不会 0 并且我们永远不会中断循环。

for(count = 1;count--;count--)
{   
    printf("\n%5d", count);
}

您现在应该能够弄清楚为什么最后一个只运行一次:

for( count=2  ;count--;count--)
{   
    printf("\n%5d", count);
}

显然在第一次评估后,count 会递减。然后一旦代码块被执行,它就会再次递减。因此,当我们到达 for 循环中的条件检查时,count0 并且我们中断。

  1. for(left;middle;right) 中间的表达式是条件 - 一个可根据上下文转换为 bool 的表达式。这个表达式在每次迭代之前被评估,如果它产生假(或者在 int 的情况下为 0),则退出循环。

  2. foo-- 是一个 post 运算符,这意味着值是 foo 先求值然后递减。

将这两个放在一起,

Case1:在进入循环之前,计算count--。计数当前值为0。因此不执行循环。

Case2:count--求值为1,进入循环一次。 count-- 在循环结束时执行。 count-- 现在在循环开始时计算为 -1,因此再次执行循环,依此类推 - 无限期

Case3:count--为2,循环结束count--为0,循环1次后退出。