我有个很奇怪的问题。稍后您将看到的函数应该是确保2D数组中的所有元素(字符)都位于最高位,也就是说,任何字符上方都没有空格。例如,一块板可能是这样的:
1 X * * X ^
2 * X ^ *
3 o o * X ^
4 o ^ X X X
5 ^ * X * ^
1 2 3 4 5
在(2,1)处有一个问题,因为在非空空间上方有一个空空间。
我的函数正确地进行排序,但是它删除了最下面一行中上面有空白的任何字符。我不能,为了我的生命,找出原因。这是我的排序函数。
int bb_float_one_step(BBoard board){
int i,j;
for (i = 0; i < board->rows; i++){
for (j = 0; j < board->cols; j++){
if (board->boardDim[i][j] == None && (board->boardDim[i + 1][j] != None && i + 1 <= board->rows)){
char tmp = board->boardDim[i + 1][j];
board->boardDim[i + 1][j] = board->boardDim[i][j];
board->boardDim[i][j] = tmp;
}
}
}
for (i = 0; i < board->rows; i++){
for (j = 0; j < board->cols; j++){
printf("%c",board->boardDim[i][j]);}printf("\n");}
}
下面是完整序列的图片,程序打印一块板。系统会要求用户选择要“弹出”的区域。然后,一个函数会替换所有用空格连接的字符。然后在图片的最后部分,您可以看到如何删除字符。没有边框的板在那里,因为我用它来检查字符是否真的被删除了。
感谢你在高级1,阅读这篇文章,2,任何你能给的帮助。
最佳答案
因为您正在比较当前行和下一行,所以应该使用for(i = 0; i < board->rows-1; i++)
然后在复杂的if语句中,去掉&& i <= board->rows
。这应该是一个小于无论如何,不小于或等于。你会越界,把垃圾放进你的数组。