c - 将文件中的文本读入嵌套循环

标签 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  

最佳答案

问题是数组声明为:

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

关于c - 将文件中的文本读入嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808745/

相关文章:

C - 读取文件的一部分

python - 将列表元素与列表列表元素进行比较并有条件地创建新列表

python - 循环获取两条用户输入并保存到全局列表

javascript - 如何从返回 json 数组的 ajax 调用构建 javascript 数组?

php - Laravel:如何获取嵌套模型

javascript - 嵌套嵌套函数以按顺序运行

CS50 Pset3 音乐 - sizeof(string) 在做什么?

c - 如何使用 fgetc() 仅捕获字母并将输入存储到数组中

elasticsearch - 如何对嵌套对象进行聚合 - Elasticsearch

c - 将二维数组(矩阵)保存到 C 函数内的二进制文件