在for
循环内的程序中,有一个赋值语句而不是逻辑比较。
该计划说:
void main()
{
int i, j=6;
for(; i=j; j-=2)
{
printf("%d",j );
}
}
输出是:
642
请解释循环的条件部分,即:i=j
以及循环如何执行!
答案 0 :(得分:0)
在C ++或C中,几乎可以将任何表达式作为条件:任何东西 评估为零意味着错误;非零意味着真实。
以下是Source和Sample code,供您查看C / C ++中的条件。
如果j-=2
令您感到困惑,那么它就是j=j-2
的简写。您可以查看此link以获取有关短缺的更多信息。
以下是分解说明:
void main()
{
// i is undefined and j is 6
int i,j=6;
for(; i=j; j-=2)
// i starts from 6, getting the value of j in each condition checking.
// on every comparison, the value of j is assigned to i
// loop goes on till i=j ie: i=j=0 in this case
// in every iteration j is decremented by 2 ie: j=j-2
// print the value in j
printf("%d", j);
}
编辑:最初我错过了i=j
部分。我认为它是i==j
。
所以解释,在这种情况下,循环没有初始化器。但是,循环条件而不是逻辑条件是初始化语句。因此i
在第一次检查循环条件时从6
获取j
的值,而不是从i
的声明中获取i
的值。在所有后续检查中,即在每次循环迭代之后,j
将被赋予i=j
的值,并且条件0
对于所有期望值j
都将为真。因此当0
为i
时,循环退出,然后0
为i=j
,然后0
也为Persons.OrderBy(p => p.CreatedDate);
答案 1 :(得分:0)
迭代3次。第一个输出是6,第二个输出是4,最后一个输出是2。 你可以改变你的代码,而且很清楚。
int i, j = 6;
for (; i = j; j -= 2){
printf("j=%d", j);
printf("i=%d", i);
}