我不理解它后面的循环语句和表达式。请帮我理解。
#include<stdio.h>
int main()
{
int x = 1;
int y = 1;
for( ; y ; printf("%d %d\n",x,y))
y = x++ <= 5;
return 0;
}
我得到的输出
2 1
3 1
4 1
5 1
6 1
7 0
我不理解它后面的循环语句和表达式。请帮我理解。
#include<stdio.h>
int main()
{
int x = 1;
int y = 1;
for( ; y ; printf("%d %d\n",x,y))
y = x++ <= 5;
return 0;
}
我得到的输出
2 1
3 1
4 1
5 1
6 1
7 0
y = x++ <= 5;
==> y = (x++ <= 5);
==> 先比较x
与5
检查是否x
小然后或等于5
或不。的结果(x++ <= 5)
是1
,0
分配给y
,
x
变成 > 5
,(x++ <= 5)
变成这样0
,y = 0
条件false
和循环中断,
基本上 for 语法是: for(StartCondition; Test; PostLoopOperation) DoWhileTestPasses;
在这种情况下:
StartCondition == None
Test == (y != 0)
PostLoopOperation == do some printing
DoWhileTestPasses == set y to zero if x > 5 otherwise to non-zero THEN increment x.
这都是相当糟糕的做法,因为它令人困惑。
最好写成:
int x=0;
int y=0;
for(y=0; y = (x <= 6); x++)
{
printff("%d %d\n",x,y);
}
return(0);
在y = x++ <= 5;
中,y
存储条件输出的值x++ <= 5
(这里x++
是后增量)。如果条件为真,则为y = 1
else y = 0
。
for( ; y ; printf("%d %d\n",x,y))
在 for 循环中,您正在打印执行 for 循环体的值x
和之后的值。y
初始化变量:
int x = 1; int y = 1;
有以下3
语句for loop
:-1。Initialize, 2. Condition, 3. Iteration:increment/decrement
在您的情况下,您没有提供初始化条件,但是,您有条件和增量部分。我不认为您的 for 循环以正确的方式使用。
您应该像这样将增量部分与您的身体交换:
for(; y; y = x++ <= 5;)
printf("%d %d\n", x, y)
首先,您检查条件是否为真,y
是否为真。然后,您打印x
并y
输出。然后,执行x++ <= 5
或不执行增量部分。结果分配给y
。它会一直这样做,直到您的条件为假y
== false
。
注意:为了良好的编程,你应该用花括号括住你的身体。
类似于这个
int x = 1;
for( int y = 1; y!=0 ; )
{
if (x++ <= 5)
{
y = 1;
}
else
{
y = 0;
}
printf("%d %d\n",x,y);
}
也许这个稍微转换(但功能相同)的代码会有所帮助:
int x = 1;
int y = 1;
while (y) {
y = (x <= 5);
x = x + 1;
printf("%d %d\n", x, y)
}