2014-01-19 198 views
0
char i; 

for (i = 1; i < 10, i++;) 
{ 
    cout << (i+1) << endl; 
} 

return 0; 

沒有檢查條件我明白,for循環的語法如下:在for循環C++

for(initialization; condition; increment) 
{ 

} 

當我運行調試,爲什麼它從來沒有檢查條件,並最終停止在I = 0 ? (謝謝達米安和安達爾斯,我不知道爲什麼「故意」陳述已被刪除,但你正確地解釋了我的問題。有人可以解釋爲什麼編譯器在逗號前跳過條件,爲什麼循環停在I = 0,而不是無休止的循環下去?謝謝!)

+4

這是逗號運算符。 – chris

+0

就像@chris說的,你需要在十歲之後和我之前做一個分號。 –

+0

正如@chris所示,將10之後的逗號改爲分號。您也可以在右括號之前刪除分號。最後,你通常會將'i'聲明爲'int'而不是'char'。 – Turix

回答

2

我相信他表示,他寫的代碼有目的的方式。

要回答,i ++將始終返回true。最後一個值是用逗號分隔的語句重要的值,因此循環不會停止。

編輯的闡述:

它不是簡單地使用邏輯或,它忽略什麼是逗號之前,只需要最後一個值。任何非零值都被認爲是真實的,因爲我從1開始,並且上升,它總是非零(直到它溢出並繞回,這就解釋了爲什麼我以0結束)。

如果你說:

x = 4, 5, 6; 

x是等於6,最後一個值。

+0

這回答我上面的評論。因此,編譯器將逗號用作邏輯或? –

+0

不,不是或,它忽略逗號前的內容,只取最後一個值。任何非零值都被認爲是真實的,因爲我從1開始,並且上升,它總是非零。 –

+0

_goes up,它將永遠是非零。我不同意!它也向我展示了Zero! –

0

因爲使用逗號操作符,而不是一個分號

1

變化

for (i = 1; i < 10, i++;) 

for (i = 1; i < 10; i++) 
1

更改爲

for (i = 1; i < 10; i++) //Notice correct placement of ; 
1

在我看來,代碼被錯誤地寫入了目的。正如其他人所提到的,逗號運算符將丟棄i<10的值,並且僅將i++作爲條件進行評估。這將返回true,直到i溢出(僅從-127到127的值)並結束於-1,此時i++將返回0並且循環退出。因此,我的最終值將爲0.