我在将一些文件输入读入多维数组时遇到了一些麻烦。我有两个嵌套的for循环打印出不同的输出,但我希望它们打印出相同的输出。我被困在它上好几个小时,可能只是处于精神障碍中。输入文件是一组9x9的数字。我的问题发生在[0] [8],[1,8]等...因为它只是复制[1,0],[2,0]等的值...继承人的第一个嵌套循环及其输出:
for(j=0;j<9;j++){
if(j!=0){
printf("%c",fgetc(file));
}
for(k=0;k<9;k++){
array[j][k]=fgetc(file);
printf("array[%i][%i] :%c \n",j,k,array[j][k]);
}
printf("\n");
}
一些输出:
array[0][0] :8
array[0][1] :5
array[0][2] :2
array[0][3] :7
array[0][4] :1
array[0][5] :3
array[0][6] :9
array[0][7] :4
array[0][8] :6
array[1][0] :4
array[1][1] :3
array[1][2] :1
array[1][3] :9
array[1][4] :2
array[1][5] :6
array[1][6] :5
array[1][7] :7
array[1][8] :8
array[2][0] :9
array[2][1] :7
array[2][2] :6
array[2][3] :5
array[2][4] :4
array[2][5] :8
array[2][6] :2
array[2][7] :3
array[2][8] :1
这是我的第二个嵌套循环,它位于前一组代码的正下方。我想做的就是阅读我刚才写的多维数组的内容。
for(j=0;j<9;j++){
for(k=0;k<9;k++){
printf("array[%i][%i] :%c \n",j,k,array[j][k]);
}
printf("\n");
}
这是循环的输出:
array[0][0] :8
array[0][1] :5
array[0][2] :2
array[0][3] :7
array[0][4] :1
array[0][5] :3
array[0][6] :9
array[0][7] :4
array[0][8] :4
array[1][0] :4
array[1][1] :3
array[1][2] :1
array[1][3] :9
array[1][4] :2
array[1][5] :6
array[1][6] :5
array[1][7] :7
array[1][8] :9
array[2][0] :9
array[2][1] :7
array[2][2] :6
array[2][3] :5
array[2][4] :4
array[2][5] :8
array[2][6] :2
array[2][7] :3
array[2][8] :7
答案 0 :(得分:3)
问题是数组声明为:
int array[8][8];
但是数组应该是9x9(因此int array[9][9];
)。如果你的数组是8x8,那么你的有效循环索引是0..7,而不是0..8。您正在覆盖数组的边界,导致完全未定义的行为。值得注意的是,一旦你进入了第九行,你就完全在数组的范围之外写作,写下谁知道其他数据。
显示的覆盖正是您在这种情况下所期望的。第二行的第一个数字会覆盖“第一行”的最后一位数字,因此代码看不到输入的数字,而是代码为4。
第一循环:
array[0][8] :6
array[1][0] :4
第二次循环:
array[0][8] :4
array[1][0] :4