簡體   English   中英

For循環不會停在零索引處

[英]For loop doesn't stop at zero index

對不起,可能有一個愚蠢的問題。 我的循環不會停在0,我不知道為什么。

該循環將在i = 1處停止

for (unsigned int i = 3 ; i > 0 ; i--)

而這將停留在i = 4294967295而不是

for (unsigned int i = 3 ; i >= 0 ; i--)

為什么? 我想念什么嗎?

實際上,對於unsigned int, i >= 0始終為true。 所以你不能用它作為循環不變量。

請改用:

for (unsigned int i = 4 ; i-- > 0 ;)
  println(i);

它將打印3,2,1,0

for循環迭代,直到break條件計算為false

在你的情況下,循環將重復檢查:是i>0 (分別為i>=0 )是true嗎? 如果是這樣,執行body並減少i ,否則跳過循環體。

你的第一個循環將在某一點達到i=1 i>0將評估為true 身體將被執行, i將被減少。 然后i將為0.因此i>0將評估為false並且不會執行正文並且您將跳出循環。

你的第二個循環不會停止(用g ++測試)。 為什么? 你的i將達到0. i>=0將評估為真。 身體將被執行, i將被減少。 但是,由於您使用的是unsigned int ,這將然后分配到4294967295 i 由於4294967295>=0 ,循環將繼續,再次達到0並再次為i分配4294967295,從而無限期地執行。

發生這種情況是因為unsigned int表示0,因為二進制中的所有0並從中減去1將產生所有1,這被解釋為4294967295。

如何避免這個問題? 正如評論中所提到的,一個簡單的方法就是使用int而不是unsigned int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM