2013-10-09 148 views
0

我運行一個基本循環來檢查在二維陣列的上對角線元素的值正確地遞增:for循環不使用C

//Check upper diagonal 
for (i = 0; i < n; i++){ 
    for (j = i+1; j<(n-1); j++){ 
     printf("n: %d i: %d j: %d\n",n, i, j); 
     if (myA[i][j] > pow(10,-13)) return 0; 
    } 
} 

然而,這種代碼不會準確地檢查我想要的元素它來。我放置在內環打印語句給出以下輸出:

n: 4 i: 0 j: 1 
n: 4 i: 0 j: 1 
n: 4 i: 0 j: 2 
n: 4 i: 1 j: 2 

的特別有挑戰性的部分是第一和第二線之間。看來j在中間循環的第一次迭代之後沒有像我預期的那樣遞增。

爲什麼我的輸出的第二行顯示j: 2

+7

我不相信你!顯示一個完整的程序。刪除除循環和printf之外的所有內容。刪除if。應該是10行代碼。 –

+1

我的猜測是你的'if'陳述是'true',你比你想象的要早。如果你提供[SSCCE](http://sscce.org/),我相信它更有意義。 –

+3

難道是整段代碼運行了兩次,第二行是第二次運行的開始?也就是說,for循環的第一次運行碰到'if'語句,它是真的,並且它返回。 – Thanatos

回答

4

您的輸出的第二行不會顯示j: 2,因爲您的循環由return 0終止。輸出的第二行實際上是包含此代碼的函數的另一個調用的結果。

您可以輕鬆地在內環註釋掉if語句測試:

//Check upper diagonal 
for (i = 0; i < n; i++){ 
    for (j = i+1; j<(n-1); j++){ 
     printf("n: %d i: %d j: %d\n",n, i, j); 
     //if (myA[i][j] > pow(10,-13)) return 0; 
    } 
} 
+1

正確。我將在下次使用SSCCE,我的歉意。 –