数组无法正常读取

时间:2013-06-13 07:13:51

标签: c arrays

我有一个2D数组。我正在迭代所有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行中没有任何元素。为什么?请帮助!!!

@Mat 发布代码:

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

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行为空。

我们正在读取文件中的输入并进行打印。此代码是我们正在处理的AI的一部分,因此无法发布所有代码,因为它很复杂。印刷板张贴在下面:

第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");
    }
}

3 个答案:

答案 0 :(得分:0)

使用这些行,

    printf ("empty row board[%d][%d] = %d ", i, row, board[row][i]);
    printf ("empty row board[%d][%d] = %d\n", i, row+1, board[row+1][i]);
    if(board[row][i] == 1 || board[row][i] == 2 || board[row][i] == 3)

这应该按预期工作。查看以前的答案re row / col mix up。 这假设电路板阵列的大小实际为16 x 16,而num_col + 2的评估值为12。

我会使用gdb来运行程序,然后你可以使用print board [3],print board [4]等来查看程序看到的内容。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

将第一组整个数组打印为矩阵

的代码中行和列互换

使用

 void print_board(){
    int i;
    int j;

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