C中for循环导致无限循环的示例

时间:2018-10-27 17:50:04

标签: c for-loop

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

#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个后减量? 但是,为什么不发生这种情况?

3 个答案:

答案 0 :(得分:3)

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

尤其是,恰好在所涉及的迭代之前,循环头中的n首先被n--递减为1(因为这必须发生在前一次迭代结束之后,即条件{{ 1}})。

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

结果是,每次n!=0都为真(特别是,因为n必须先完成n!=0,所以循环n中的n--不会立即被评估)

答案 1 :(得分:1)

这是因为此处打印的第二个减量:

for(n = 7; n!=0; n--) 
    printf("n = %d", n--); 

这使得对n进行检查的顺序为7、5、3、1,-1,...。一个int的值是偶数,因此这将在下溢时形成一个循环,从而排除偶数,包括0。

请记住,for循环条件是在每次循环迭代之前以及循环本身递减之后进行求值的。循环运行时未经测试。

答案 2 :(得分:0)

尝试这样做

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