c - 数组未正确读取

标签 c arrays

我有一个二维数组。我正在迭代所有 8 行和 10 列,并使用 for 循环读取值。这是我们的数组和输出:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 2 1 1 1 0 0 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 1 2 1 2 2 1 2 1 2 1 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

empty row board[3][3] = 0 empty row board[3][4] = 1
empty row board[4][3] = 0 empty row board[4][4] = 2
empty row board[5][3] = 0 empty row board[5][4] = 1
empty row board[6][3] = 0 empty row board[6][4] = 2
empty row board[7][3] = 0 empty row board[7][4] = 2
empty row board[8][3] = 0 empty row board[8][4] = 1
empty row board[9][3] = 0 empty row board[9][4] = 2
empty row board[10][3] = 0 empty row board[10][4] = 1
empty row board[11][3] = 0 empty row board[11][4] = 2
empty row board[12][3] = 0 empty row board[12][4] = 1

实际数组被零缓冲区包围(每侧至少 3 个)。当我们尝试读取 row =3 时,它不会读取元素,而是将它们读取为全零。我们在数组下方打印了第 3 行的元素和第 1 行的元素,即 4。它可以读取第 4 行的所有元素,但无法读取第 3 行的任何元素。为什么?请帮忙!!!

@马特 发布代码:

我们正在尝试查找该行是否为空。

int emptyRow(int row){
    int i, counter;
    counter = 0;

    for(i=3; i<=num_col+2; i++) {
        printf ("empty row board[%d][%d] = %d ", i, row, board[i][row]);
        printf ("empty row board[%d][%d] = %d\n", i, row+1, board[i][row+1]);
        if(board[i][row] == 1 || board[i][row] == 2 || board[i][row] == 3)
            counter++;
    }
    return counter;         /* Counter = 0 means its empty*/
}

传递的行是3,计数器计算行中元素的数量,num_col 是列数。 该函数返回 counter = 0,这意味着第 3 行为空。

我们正在从文件中读取输入并打印它。该代码是我们正在开发的人工智能的一部分,因此无法发布所有代码,因为它很复杂。打印板张贴如下:

第 3 行是我们的边界条件,因此我们不关心第 3 行上方的内容,但我们需要正确读取第 3 行

void print_board(){
    int i;
    int j;

    for(i=0;i< 16; i++){
        for(j=0;j<16;j++){
            printf("%d ", board[j][i]);
        }
        printf("\n");
    }
}

最佳答案

假设显示的输出来自对 print_board() 的调用,并且显示的调试输出来自对 emptyRow(3) 的调用,那么唯一的解释是有意义的是 board 在这两个调用之间被修改了。检查您的软件,确保 board 包含您在调用 emptyRow(3) 之前的每个阶​​段所期望的值。

关于c - 数组未正确读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17081278/

相关文章:

使用 libxml2 计算节点的 Childs 数

c - 实体和标识符有什么区别?

c - 菜鸟组装炸弹破坏 cmp 运算符(operator)

php比较/区分一个数组和一个对象数组

c - 使用递归打印出C中所有可能的字符串

javascript - 在这种情况下有没有更好的方法来使用过滤器数组?

c - 将数组指针递增到最后一项之后

c++ - C/C++ Windows 或 Linux 将随机内存块映射为连续顺序

数组的javascript数组

javascript - 如何在javascript中根据多个分隔符将字符串拆分为多个数组