给定程序输出的解释是什么?

时间:2014-03-28 06:30:29

标签: c

以下代码的输出是

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

任何人都可以解释一下吗?

#include<stdio.h>
int main()
{
    int x=1, y=1;
    for(; y; printf("%d %d\n", x, y))
    {
        y = x++ <= 5;
    }
    printf("\n");
    return 0;
}

3 个答案:

答案 0 :(得分:2)

这是你重新制定的程序。我认为这种行为很明显。

#include<stdio.h>
int main() {
  int x=1, y=1;
  while (y != 0) {
     if (x <= 5) y = 1;
     else y = 0;
     x = x + 1;
     printf("%d %d\n", x, y)) ;
  }
  printf("\n");
  return 0;
}

答案 1 :(得分:2)

它相当简单 - 你有

for(; y; printf("%d %d\n", x, y))
    {
        y = x++ <= 5;
    }

最初为x=1y=1

第一次通过:y = x++ <= 5;表示y = 1++ <= 5(可以这么说),因此通过此声明 - x=2y=1 - 因为1<=5评估为1

第二次传递时:y = x++ <= 5;表示y = 2++ <= 5(可以这么说),因此通过此声明 - x=3y=1 - 因为1<=5评估为1

并且在y=0评估到x++ <= 5然后在6++ <= 6循环for中得到for(; y; printf("%d %d\n", x, y))时,情况评估为false因为y是0。

答案 2 :(得分:1)

y用作for循环中的条件,在此处打印数据代替增量。当printf返回int时,它完全为valid

y = x++ <= 5;

表示increment x并检查是否value of x <=5。如果是y = 1,则为y=0。 如果y=0,它将结束循环。

该程序也可以写成。

#include<stdio.h>
int main()
{
    int x=1, y=1;
    while(y)
    {
        printf("%d %d\n", x, y)
        x++;
        if(x <= 5)
           y=1;
        else
           y=0;
    }

    printf("\n");
    return 0;
}