我正在运行一个基本循环来检查二维数组上对角元素的值:
//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;
}
}
但是,此代码无法准确检查我想要的元素。我放在内部循环中的print语句给出了以下输出:
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
?
答案 0 :(得分: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;
}
}