为什么这不是一个无限循环?

时间:2014-06-01 16:52:12

标签: c

int main() {
int i,j=6;
for(;i=j;j-=2)
printf("%d",j);
   return 0;
}

这段代码给出了输出642 请解释一下为什么这个循环无法无限运行并在j为非正数时停止

3 个答案:

答案 0 :(得分:4)

j变为0时,表达式i=j的评估结果为0。因此,循环终止。

请注意,如果j以负数(例如-1)或奇数(例如5)开头,则条件永远不会评估为{{1}并将导致无限循环。

答案 1 :(得分:1)

在C 0评估为false,非零为true。当i = j并且循环终止时,控制表达式false变为j = 0 如果将程序更改为

,循环将变为无限
int i, j = 6; 
i = j;
for(; i == j; j -= 2, i = j)
    printf("%d",j);

答案 2 :(得分:0)

for(;i=j;j-=2)

这是一个没有初始代码的for循环,在每次迭代时都会将j分配给i作为条件检查,然后在结尾递减j 2。注意赋值表达式的是指定的值,因此i = j表达式将生成j的值。

那么,逐周期会发生的事情如下:

  • 分配i = 6,j = 6
  • 初始for循环语句
  • 没什么
  • i = j(6)
  • 打印j(6)
  • j -= 2
  • i = j(4)
  • 打印j(4)
  • j -= 2
  • i = j(2)
  • 打印j(2)
  • j -= 2
  • i = j(0)
  • 上面的表达式求值为0,因此为假,因此循环终止。