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);
}
等等每个计数= 奇数我得到无限的入口,并且对于每个计数= 偶数我得到有限数量的入口
有人可以解释一下为什么会这么大?
答案 0 :(得分:1)
for(left;middle;right)
中间表达式是条件 - 一个上下文可转换为bool的表达式。在每次迭代之前计算此表达式,如果它生成false(或者在int的情况下为0),则退出循环。
foo--
是一个后置运算符,这意味着首先计算值foo
,然后递减它。
将这两者放在一起,
案例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循环中进行条件检查时,count
为0
并且我们会中断。