int main() {
int i,j=6;
for(;i=j;j-=2)
printf("%d",j);
return 0;
}
这段代码给出了输出642 请解释一下为什么这个循环无法无限运行并在j为非正数时停止
答案 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 i
= j
(6)j
(6)j -= 2
i
= j
(4)j
(4)j -= 2
i
= j
(2)j
(2)j -= 2
i
= j
(0)