我不理解它后面的循环语句和表达式。请帮我理解。
#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
答案 0 :(得分:7)
y = x++ <= 5;
==&gt; y = (x++ <= 5);
==&gt;首先将x
与5
进行比较,以检查x
是否小于或等于5
。 (x++ <= 5)
的结果是1
,0
已分配给y
,
当x
成为&gt; 5
,(x++ <= 5)
变为0
所以y = 0
和条件false
并且循环中断,
答案 1 :(得分:1)
初始化变量:
int x = 1; int y = 1;
3
:-1有for loop
个语句。初始化,2。条件,3。迭代:递增/递减
在您的情况下,您没有提供初始化条件,但是,您有条件和增量的一部分。我不认为你的for循环是以正确的方式使用的。
您应该将这部分增量与您的身体交换:
for(; y; y = x++ <= 5;)
printf("%d %d\n", x, y)
首先,检查条件是否为真,y
是否为真。然后,您打印出x
和y
。然后,执行增量部分,x++ <= 5
或不执行。结果已分配给y
。它会这样做,直到您的情况为假,y
== false
。
注意:对于良好的编程,你应该用一个花括号括起你的身体。
答案 2 :(得分:1)
基本上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);
答案 3 :(得分:1)
在y = x++ <= 5;
中,y
存储条件x++ <= 5
输出的值(此处x++
为后增量)。如果条件为真,则y = 1
否则为y = 0
。
for( ; y ; printf("%d %d\n",x,y))
在for循环中,您在执行for循环体后打印x
和y
的值。
答案 4 :(得分:0)
与此相似
int x = 1;
for( int y = 1; y!=0 ; )
{
if (x++ <= 5)
{
y = 1;
}
else
{
y = 0;
}
printf("%d %d\n",x,y);
}
答案 5 :(得分:0)
也许这个稍微改变(但功能相同)的代码会有所帮助:
int x = 1;
int y = 1;
while (y) {
y = (x <= 5);
x = x + 1;
printf("%d %d\n", x, y)
}