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

sna*_*121 6 c for-loop

攻读计算机科学专业......

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

我明白将第一个参数留空会让它表现得像真......

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

我最不了解的是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;
  }
Run Code Online (Sandbox Code Playgroud)

输出是:

2 1
3 1
4 1
5 1
6 1
7 0
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

sim*_*onc 15

一个for循环可以被认为是for (INITIALIZATION; CONDITION; AFTERTHOUGHT)

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

所述y在第二表达(或条件)for环相当于y!=0.它使for循环保持运行直到y==0.

printf在事后每次迭代结束时运行,但不会改变的价值y.然而,循环的身体确实发生了变化y.

大多数教科书都会描述这一点.或者看维基百科cplusplus.


Moh*_*oun 6

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

for (a; b; c)
{
    d;
}
Run Code Online (Sandbox Code Playgroud)

这将是会发生的事情:

  1. 代码a将被执行
  2. 将评估条件b.如果它为假,则for循环中断.
  3. 代码d被执行.
  4. 代码c被执行.
  5. 转到第2步

你最后发生的事情是,代码的"c"部分正在打印它的价值y而且恰好是0.然后评估该条件.因为y == 0,for循环会因为0相当于而中断false.