对于printf作为第三个参数的循环

时间:2013-05-08 19:14:02

标签: c for-loop

学习计算机科学决赛......

我真的无法想出这个例子......

我理解将第一个参数留空会使其表现为TRUE ....

但我不明白在第二个参数中留下变量的原因是什么......

我最不了解的是printf语句如何“更新”变量条件...

  #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;
  }

输出结果为:

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

编辑:

我现在理解for循环结构部分......

感谢您的回答 - 非常有见地的谢谢!

6 个答案:

答案 0 :(得分:15)

for循环可以被视为for (INITIALIZATION; CONDITION; AFTERTHOUGHT)

循环的第一部分用于初始化。保持这个空是好的,它只是表明你已经初始化了循环所需的任何变量。

y循环的第二个表达式(或条件)中的for等同于y!=0。它使for循环保持运行直到y==0

事后想法中的printf在每次迭代结束时运行,但不会更改y的值。然而,循环的主体确实改变了y

大多数教科书都会对此进行描述。或者查看Wikipediacplusplus

答案 1 :(得分:6)

在for循环中考虑这个结构:

for (a; b; c)
{
    d;
}

这将会发生:

  1. 代码a将被执行
  2. 将评估条件b。如果它为假,则for循环中断。
  3. 执行代码d。
  4. 执行代码c。
  5. 转到第2步
  6. 最后发生的事情是,代码的“c”部分打印的是y的值,它恰好是0。然后评估该条件。自y == 0起,for循环将中断,因为0等同于false

答案 2 :(得分:2)

我早期发现的一个技巧是,如果我无法理解for循环,请尝试将其分解为等效的while循环。你也可以做些事情来使它们更具可读性(只要你遵循你的parens上的操作顺序就不要搞砸了评估。你的循环看起来就像这些变化:

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

通过这些更改,可以很容易地看到您的print语句没有更改/更新任何内容,而只是打印y值的结果。

答案 3 :(得分:0)

这运行程序直到y为0,因为0作为整数也是假

答案 4 :(得分:0)

 Leaving a variable y implies the loop will run till y is true
 loop will stop when y becomes false

 Now this condition that you have written in body evaluates value of y
 y = x++ <= 5;

 Whenever x++ <= 5 implies y is true that is 1 
 So it starts with x=1 and prints until value of x becomes 7
 and y=x++ <= 5; returns false and loop exits.

答案 5 :(得分:0)

虽然simonc提供的答案是完美的,但也有一个实用的解决方案。在Visual Studio中键入此程序,在for循环的开头添加断点并使用F10键运行每个语句。它会清楚地显示执行时的流程。这有助于清除你所有的疑虑。另外,不要忘记密切关注变量的值,这将有助于进一步。 这是帮助我完成大部分疑虑的原因。享受编码!