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