1

我不理解它后面的循环语句和表达式。请帮我理解。

#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
4

6 回答 6

7

y = x++ <= 5; ==> y = (x++ <= 5); ==> 先比较x5检查是否x 小然后或等于5或不。的结果(x++ <= 5)10分配给y

x变成 > 5(x++ <= 5)变成这样0y = 0条件false和循环中断,

于 2013-07-22T05:05:09.607 回答
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);
于 2013-07-22T05:12:44.710 回答
1

y = x++ <= 5;中,y存储条件输出的值x++ <= 5(这里x++是后增量)。如果条件为真,则为y = 1else y = 0

for( ; y ; printf("%d %d\n",x,y))

在 for 循环中,您正在打印执行 for 循环体的值x和之后的值。y

于 2013-07-22T05:13:18.357 回答
1

初始化变量:

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是否为真。然后,您打印xy输出。然后,执行x++ <= 5或不执行增量部分。结果分配给y。它会一直这样做,直到您的条件为假y== false

注意:为了良好的编程,你应该用花括号括住你的身体。

于 2013-07-22T05:08:13.883 回答
0

类似于这个

   int x = 1;
   for( int y = 1; y!=0 ; )
   {
       if (x++ <= 5)
       {
          y = 1;
       } 
       else
       {
          y = 0;
       }
       printf("%d %d\n",x,y);
   }
于 2013-07-22T05:13:13.183 回答
0

也许这个稍微转换(但功能相同)的代码会有所帮助:

int x = 1;
int y = 1;
while (y) {
   y = (x <= 5);
   x = x + 1;
   printf("%d %d\n", x, y)
}
于 2013-07-22T05:14:19.750 回答