void main()
{
int a;
a=10;
do
while(a++<10);
while(a++<=11);
printf("%d",a);
}
上述程序给出了14
的输出。 你能解释为什么吗?C程序while循环
void main()
{
int a;
a=10;
do
while(a++<10);
while(a++<=11);
printf("%d",a);
}
上述程序给出了14
的输出。 你能解释为什么吗?C程序while循环
那么后增量只会发生在条件被评估之后,所以即使条件为假,a
也会增加,并且可能会增加更多循环的运行次数,然后您会期待。
我知道后增量应用在这里,但他们如何应用? – Deant
*“他们如何应用?”*答案说:条件评估后。 'a'增加了四次,因为外部'while'循环被执行了两次,并且它的两个语句中的每一个都增加了'a'。正确缩进代码,它会更容易看到。 –
几乎你需要明白,最后一次打印只发生一次,因为它是在“块”之外(这是为什么12不打印)。所以虽然它仍然会数到14,因为a增加了4次,但只有三次打印会发生(即11,13,14)。 – Parttimereaper
此代码会让你明白为什么,当你键入++它总是递增
void main()
{
int a;
a=10;
do{
while(a++<10);
printf("%d",a);
}
while(a++<=11);
printf("%d",a);
}
更混乱。输出是11 13和14.我明白a的第一个值后递增得到11.但你怎么解释13和14. – Deant
这里你的代码评估为
int main()
{
int a;
a=10;
do{
//---> second iteration a= 12, for post iteration in while
while(a++<10); // First iteration: a=10 ,so false| second Iteration: a=12, so false
//First iteration: Here a=11, as previous line's post increment| Second iteration: here a=13, as previous post increment
} while(a++<=11); //First iteration: a==11, that evaluete true, go to --->, line after do | Second iteration: a=13, false, loop end goto next line
//Here a=14 for post increment in previous line's while loop
printf("%d",a); // a=14
}
在后增量首先评估与当前值的表达式,然后递增变量的值。
例如在第二次迭代时,外部程序开始执行时,while(a++<=11)
,此时a=13
与之前的值a
一样。这a++<=11
执行并返回0
,这使得while(0)
(因为a = 13,这是大于11)。然后增量发生,a变为14.如while(0)
它打破了do-while循环并转到下一条指令并打印出值14.
很清楚的解释。但如果条件是错误的,为什么14打印 – Deant
@Deant,回答编辑,可能你可以理解这一次。 – ashiquzzaman33
现在我明白了。谢谢。 – Deant
哦,这是邪恶的。重新格式化代码应该显示发生了什么:
a=10;
do
{
while(a++<10);
}
while(a++<=11);
所以。 a
最初设置为10
。我们输入do while
循环。 do while
循环中的唯一声明是while(a++ < 10);
。请记住,表达式a++
评估为当前值a
,并且作为副作用增量a
。
因此,a++ < 10
被评估。结果为false
(10
不小于10
),但作为评估该表达式的结果,a
递增,现在具有值11
。在do while
循环结束时,我们评估a++<=11
。由于a
当前的值为11
,因此该评估为true
。作为评估表达式的结果,a
增加到12
。
我们再次执行do while
循环的主体。再次评估表达式a++ < 10
。与之前一样,结果为false
,但作为评估表达式a
的结果递增到13
。
然后,我们再次评估a++ <= 11
。结果为false
,因为13
不小于或等于11
,并且a
递增一次。
因此,当整个混乱结束时,a
是14
。
汇总:
a
最初10
;do while
进入循环a++ < 10
进行评价时,现在a
是11
a++ <= 11
进行评价时,现在a
是12
,do while
循环重复a++ < 10
进行评价时,a
现在13
a++ <= 11
被评估,a
现在是14
,do while
环路退出。
很好的解释。但是当它是14而不是13时它为什么会离开? – Deant
@Deant - 看第4步。它在13进入循环,因为13不是<= 11,而是后增加到14,所以它离开外循环。 – ryyker
我现在明白了。非常感谢 – Deant