c-在for循环中,检查计数会取消循环吗

  • 本文关键字:循环 取消 for 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);
}

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

有人能解释一下为什么会这样吗?

  1. for(left;middle;right)中间表达式是条件-一个在上下文中可转换为布尔的表达式。该表达式在每次迭代之前进行求值,如果它产生false(在int的情况下为0),则退出循环。

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

把这两者放在一起,

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

第2种情况:计数——计算结果为1,循环输入一次。count——在循环结束时执行。count——现在在循环开始时计算为-1,因此循环再次执行,依此类推——无限

Case3:count是2,循环结束计数是0,所以循环在1次迭代后退出。

我认为您首先需要确切地知道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循环检查时,计数总是奇数,因此计数永远不可能是0,我们永远不会脱离循环

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

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

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

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

最新更新