这个for循环在C中做了什么?

时间:2018-03-05 10:10:53

标签: c loops for-loop conditional-statements

#include <stdio.h>

int main(void) {    
    int i= 1, j = 1;
    for (; j; printf("%d  %d",i, j))
        j = i++ <= 5;
    return 0;
}

输出 -

2  13  14  15  16  17  0

任何人都可以解释循环内发生的事情吗?在面试过程中提出了这个问题。

5 个答案:

答案 0 :(得分:3)

代码相当于:

int main(void) {    
  int i=1,j=1;
  while (j != 0) {
    j = (i<=5);
    i = i+1;
    printf("%d  %d",i,j);
  }
  return 0;
}

我认为它的意义和产出现在很明显。请注意printf在第二个数字后不会打印任何分隔符。这意味着输出中的两位“数字”由两个连续的printf调用打印。如果您使用printf("%d %d; ",i,j);代替printf("%d %d",i,j);,则输出将为:

2  1;  3  1;  4  1;  5  1;  6  1;  7  0;

答案 1 :(得分:1)

您的代码与

相同
@include https://www.reddit.com/*

现在应该很容易理解。

答案 2 :(得分:0)

最初,ij1因此循环条件为真,它将进​​入循环。 首先在j = i++<=5;语句处执行条件操作并将条件操作的结果(true = 1,或false = 0)分配给j并将i增加1。在此之后,它将从循环执行print语句,该语句将打印i的值(现在增加1为2)和j(条件为真时将为1)。这将持续到i<=5条件为真。每当i变得大于5时,j将为0,从而打破循环。

答案 3 :(得分:0)

去混淆,代码等同于:

for(int i=1; i<7; i++)
{
  printf("%d\t%d\n", i+1, (i+1) < 7);
}

需要什么样的循环,我不知道。

答案 4 :(得分:0)

要使代码及其输出更清晰,请按以下方式重写程序

#include <stdio.h>

int main(void) 
{
    for ( int i = 1, j = 1; j != 0; )
    {
        j = i++ <= 5;
        printf("%d  %d\n", i, j );
    }

    return 0;
}

程序输出

2  1
3  1
4  1
5  1
6  1
7  0

由于此条件

计算变量j
i++ <= 5

然后它将始终等于1,除非i等于6,因为对于此值i,条件的计算结果为false,即为0 j,此值已分配给i

因此,循环的最后一次迭代是j = i++ <= 5; 等于6.在这种情况下,在此语句之后

7

我将等于0,j将等于7 0 。这些值在循环的最后一次迭代中输出。

batch