学习计算机科学决赛......
我真的无法想出这个例子......
我理解将第一个参数留空会使其表现为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循环结构部分......
感谢您的回答 - 非常有见地的谢谢!
答案 0 :(得分:15)
for
循环可以被视为for (INITIALIZATION; CONDITION; AFTERTHOUGHT)
循环的第一部分用于初始化。保持这个空是好的,它只是表明你已经初始化了循环所需的任何变量。
y
循环的第二个表达式(或条件)中的for
等同于y!=0
。它使for
循环保持运行直到y==0
。
事后想法中的printf
在每次迭代结束时运行,但不会更改y
的值。然而,循环的主体确实改变了y
。
答案 1 :(得分:6)
在for循环中考虑这个结构:
for (a; b; c)
{
d;
}
这将会发生:
最后发生的事情是,代码的“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键运行每个语句。它会清楚地显示执行时的流程。这有助于清除你所有的疑虑。另外,不要忘记密切关注变量的值,这将有助于进一步。 这是帮助我完成大部分疑虑的原因。享受编码!