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

时间:2015-04-23 22:24:45

标签: c for-loop count

Sry我是C语言的新手。 有人可以帮助我理解" for"循环:

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

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

当我运行这段代码时,我会无限次地进入循环:

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

当我运行此代码时,我得到一个循环入口:

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

等等每个计数= 奇数我得到无限的入口,并且对于每个计数= 偶数我得到有限数量的入口

有人可以解释一下为什么会这么大?

2 个答案:

答案 0 :(得分:1)

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

  2. foo--是一个后置运算符,这意味着首先计算值foo,然后递减它。

  3. 将这两者放在一起,

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

    Case2:count--计算结果为1,循环输入一次。 count--在循环结束时执行。 count--现在在循环开始时计算为-1,因此循环再次执行,依此类推 - ad infinitum

    Case3:count--为2,循环计数结束 - 为0,因此循环在1次迭代后退出。

答案 1 :(得分:0)

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

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

下一个循环从1开始计数,这意味着count--将被评估为1,这使得for循环的条件检查等于1。评估后,计数变为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并且我们会中断。