#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
有人可以解释这是输出的原因和原因吗?
答案 0 :(得分:2)
要了解for
循环的作用,这里是等效的while
循环:
while (y) {
y = x++ <= 5;
printf("%d%d\n",x,y);
}
转变如下:
for (INIT; COND; INC) {
BODY;
}
- &GT;
INIT;
while (COND) {
BODY;
INC;
}
请注意,如果y
是y != 0
,则在C语言中,表达式y
相当于int
。
答案 1 :(得分:2)
如果扩展它,构造变得易于理解。 我认为这里的技巧是理解在比较之后发生x的后缀增量。
您的示例中显示的另一个概念是,在C中,所有比较都返回一个布尔值(1表示true,0表示false)。
#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;
}
我希望这能回答你的问题。
答案 2 :(得分:1)
总结C循环如何工作:
for(initialization; condition; expression) {
//statements
}
1。在条件的第一次评估之前执行初始化 2.循环的每次迭代后都会计算表达式。只有当条件为真时才会输入循环。
在您的代码中,请注意,在该行中,
y = x++ <= 5;
在值增加之前,将'x'与数字5进行比较。例如,在第5次迭代时,针对(&lt; = 5)检查x = 5,然后将其递增为6.之后语句
printf("%d%d\n",x,y)
执行打印“61”。