#include <stdio.h>
int main()
{
int x = 1, y = 1;
for(;y;printf("%d%d\n",x,y))
y = x++ <= 5;
return 0;
}
我对上面代码片段中 for 构造的结构感到困惑。它取自一本关于 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;
return 0;
}
我对上面代码片段中 for 构造的结构感到困惑。它取自一本关于 C 编程的书。
根据本书,正确的输出如下。
2 1
3 1
4 1
5 1
6 1
7 0
有人可以解释这是输出的方式和原因吗?
如果你扩展它,这个结构就会变得很容易理解。我认为这里的诀窍在于理解 x 的后缀递增发生在比较之后。
您的示例中显示的另一个概念是,在 C 中,所有比较都返回一个布尔值(1 表示真,0 表示假)。
#include <stdio.h>
int main()
{
int x = 1, y = 1;
printf("first version:\n");
for(;y;printf("%d%d\n",x,y))
y = x++ <= 5;
printf("second version:\n");
x = 1;
y = 1;
while (y != 0)
{
if (x <= 5)
y = 1;
else
y = 0;
x = x + 1;
printf ("%d%d\n",x,y);
}
return 0;
}
我希望这回答了你的问题。
要了解for
循环的作用,这里是等效while
循环:
while (y) {
y = x++ <= 5;
printf("%d%d\n",x,y);
}
转换是这样的:
for (INIT; COND; INC) {
BODY;
}
->
INIT;
while (COND) {
BODY;
INC;
}
请注意,在 C 中,表达式y
等价于y != 0
if y
is an int
。
总结一下 for 循环在 C 中的工作原理:
for(initialization; condition; expression) {
//statements
}
1.在条件的第一次评估之前执行初始化
2.在循环的每次迭代之后评估表达式。3. 只有条件为真时才会进入循环。
在您的代码中,请注意在该行中,
y = x++ <= 5;
' x ' 与数字 5 在其值递增之前进行比较。例如,在第 5 次迭代中,检查 x=5 是否符合 (<=5),然后将其递增到 6。之后的语句
printf("%d%d\n",x,y)
执行打印“61”。