首页 > 解决方案 > C 中 for 循环导致无限循环的示例

问题描述

以下程序被引用为进入无限循环:

#include<stdio.h> 
int main() 
{ 
   int n; 
   for(n = 7; n!=0; n--) 
     printf("n = %d", n--); 
   getchar(); 
   return 0; 
}

在分析中,我确实发现在某一时刻 n 的值确实变为 0,然后循环应该终止。不会发生这样的情况,当它第一次进入循环时,值为 7,然后变为 6,因为每次迭代有 2 个后递减?但是,为什么没有发生呢?

标签: cfor-loop

解决方案


每次循环迭代实际上减少n了 2,并且比较n != 0总是看到一个奇数值i,因此永远不会终止。

特别是,就在所讨论的迭代之前,首先n--在循环头中将 n 减为 1(因为这必须发生在上一次迭代结束之后,就在条件评估之前n!=0)。

然后,printf("n = %d", n--);被评估,打印n = 1,同时递减n零。在循环体结束后,nn--在循环头中再次递减,使其变为 -1,就在n!=0评估条件以确定循环是否应该继续之前。

结果,n!=0每次评估时都为真(特别是,在 n 为零的那一刻不评估它,因为n--循环头必须首先完成)


推荐阅读