#include <stdio.h>
int main(void) {
int i= 1, j = 1;
for (; j; printf("%d %d",i, j))
j = i++ <= 5;
return 0;
}
输出 -
2 13 14 15 16 17 0
任何人都可以解释循环内发生的事情吗?在面试过程中提出了这个问题。
答案 0 :(得分:3)
代码相当于:
int main(void) {
int i=1,j=1;
while (j != 0) {
j = (i<=5);
i = i+1;
printf("%d %d",i,j);
}
return 0;
}
我认为它的意义和产出现在很明显。请注意printf
在第二个数字后不会打印任何分隔符。这意味着输出中的两位“数字”由两个连续的printf
调用打印。如果您使用printf("%d %d; ",i,j);
代替printf("%d %d",i,j);
,则输出将为:
2 1; 3 1; 4 1; 5 1; 6 1; 7 0;
答案 1 :(得分:1)
您的代码与
相同@include https://www.reddit.com/*
现在应该很容易理解。
答案 2 :(得分:0)
最初,i
和j
为1
因此循环条件为真,它将进入循环。
首先在j = i++<=5;
语句处执行条件操作并将条件操作的结果(true = 1,或false = 0)分配给j
并将i
增加1。在此之后,它将从循环执行print语句,该语句将打印i
的值(现在增加1为2)和j
(条件为真时将为1)。这将持续到i<=5
条件为真。每当i
变得大于5时,j
将为0,从而打破循环。
答案 3 :(得分:0)
去混淆,代码等同于:
for(int i=1; i<7; i++)
{
printf("%d\t%d\n", i+1, (i+1) < 7);
}
需要什么样的循环,我不知道。
答案 4 :(得分:0)
要使代码及其输出更清晰,请按以下方式重写程序
#include <stdio.h>
int main(void)
{
for ( int i = 1, j = 1; j != 0; )
{
j = i++ <= 5;
printf("%d %d\n", i, j );
}
return 0;
}
程序输出
2 1
3 1
4 1
5 1
6 1
7 0
由于此条件
计算变量j
i++ <= 5
然后它将始终等于1
,除非i
等于6
,因为对于此值i
,条件的计算结果为false,即为0
j
,此值已分配给i
。
因此,循环的最后一次迭代是j = i++ <= 5;
等于6.在这种情况下,在此语句之后
7
我将等于0
,j将等于7 0
。这些值在循环的最后一次迭代中输出。
batch