从文件读取文本到嵌套循环

时间:2012-12-10 20:33:14

标签: c loops nested

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

1 个答案:

答案 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
相关问题