![](/img/trans.png)
[英]while (_index != string::npos) doesn't seem to be stopping the loop
[英]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.