2016-09-08 65 views
1

我的代碼旨在反向打印數組,但由於某種原因,遞減運算符未按預期工作。根據我的理解,--var在完成任何事情之前遞減變量var,而var--在操作完成後遞減變量var,例如for循環。遞減運算符的奇怪行爲

這裏是我的代碼:

#include <iostream> 

int main() { 
    int arrLen; 
    int arr[4]; 
    scanf("%d\n %d %d %d %d", &arrLen, &arr[0], &arr[1], &arr[2], &arr[3]); 
    for (; arrLen >= 0; --arrLen) 
     printf("%d %d\n", arr[arrLen], arrLen); 

    return 0; 
} 

這裏是我的結果(在輸出正確的價值是遞減的變量,我添加它來檢查):

0 4 
2 3 
3 2 
4 1 
1 0 

沒有遞減變量正在打印它應該是:

0 2 3 4 1

這裏是我的預計業績:

2 3 4 1

+0

爲什麼使用 「\ n」 在scanf()函數? –

+0

@ M.SChaudhari檢查一個int後跟一個\ n –

+1

這個問題是如何得到3的選票我不明白.... – ZivS

回答

7

,你想到這是不是表現的原因是因爲for迴路是如何工作的。

for (statement_1; condition; statement_2) { 
    body; 
} 

statement_1在循環開始前僅調用一次。

condition在循環中的每次傳遞開始時進行評估。如果是,評估body。如果沒有,循環退出。

statement_2只是重新評估condition之前的body在迴路中的每遍結束後評價

因此,雖然--var不會減少並返回遞減值,但它僅在您每次運行for循環後正式調用。

這意味着--varvar--statement_2部分的for循環的行爲將具有相同的效果。

要生成需要的行爲,你可以爲循環改變你這樣的:

while (--arrLen >= 0) 
    printf("%d %d\n", arr[arrLen], arrLen); 
0

與以下行試試。我認爲你的for循環是不正確的。

for (; arrLen > 0; --arrLen) printf("%d %d\n", arr[arrLen - 1], arrLen); 

現在將有以下輸出

2 4 
3 3 
4 2 
1 1 
+0

這將工作,但它沒有解決根本的誤解,作品 – sokkyoku