0

我在将文件中的某些输入读取到多维数组时遇到了一些麻烦。我有两个嵌套的 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  
4

1 回答 1

3

问题是数组被声明为:

int array[8][8];

但数组应该是 9x9(因此int array[9][9];)。如果您的数组是 8x8,那么您的有效循环索引是 0..7,而不是 0..8。您正在覆盖数组的边界,导致完全未定义的行为。值得注意的是,一旦你在第九行,你就完全超出了数组的范围,在谁知道其他数据上乱涂乱画。

显示的覆盖正是您在这种情况下所期望的。第二行的第一个数字会覆盖“第一行”的最后一个数字,因此输入的代码不会看到 6,而是看到 4。

第一个循环:

array[0][8] :6  

array[1][0] :4

第二个循环:

array[0][8] :4  

array[1][0] :4
于 2012-12-10T21:01:05.397 回答