我有一个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");
}
}
答案 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");
}
}